2013-05-28 4 views
-3

Я просмотрел весь ответ на свой вопрос, но не смог найти решение. Я хочу отображать значения из двух отдельных массивов бок о бок "without joining the arrays together."Отображение двух отдельных значений массива рядом друг с другом

Ex.

var names = ["Ben", "Joel", "Randy"]; 
var scores = [88, 99, 100]; 

Я хочу, чтобы они отображались в текстовом поле бок о бок без необходимости их соединять или объединять. Они должны оставаться отдельными для разных операций.

Ex.

Ben, 88 
Joel, 99 
Randy, 100 

Любая помощь будет очень признательна! Благодарю.

Это то, что я пробовал:

var list = ""; 
for (var n in names) { 
    for (var s in scores) { 
     list = names[n] + ", " + scores[s]; 

    } 

} 
+1

Запуск цикла и доступ к обеим массивам со счетчиком цикла. – Joseph

+1

Вы знаете, как распечатать значения из одного массива? Если это так, логика должна быть очень схожей для двух массивов. – jahroy

+0

Это то, что я пробовал: – user1890525

ответ

1
var names = ["Ben", "Joel", "Randy"]; 
var scores = [88, 99, 100]; 

var text=names.map(function(itm,i){ 
    return [itm,scores[i]]; 
}).join('<br>'); 

// вернуть текст в какой-нибудь элемента innerHTML

// или разграничить с '\ п' для текстового поля или значение TEXTAREA

+0

Я всегда забываю о функции '.map()', пока кто-то не разместит ее. – tymeJV

+0

Это помогло! вместо .join ('
') Я использовал .join ("\ n") для достижения правильных результатов. Ура! – user1890525

2

Это в значительной степени основной для цикла вы ищете (предполагая, что оба массива будет всегда один и тот же размер):

for (var i = 0; i < names.length; i++) { 
    var nameString = names[i] + " " + scores[i]; 
    //do stuff with nameString 
} 
0
var i; 

for(i = 0; i < names.length; i++) 
{ 
    document.write(names[i] + " " + scores[i] + "<br>"); 
} 

Или это не то, что вы ищете? Я не уверен, присоединился ли я к ним.

1

OP сказал (цитирую)

Это то, что я пробовал:

var list = ""; 
for (var n in names) { 
    for (var s in scores) { 
    list = names[n] + ", " + scores[s]; 
    } 
} 

У вас проблема в том, что вы вложенные петли. Это дает вам декартовый продукт двух комплектов (например, если ваш names имеет длину 10 и ваши «оценки» имеют длину 20, вы получите 200 строк в результате, по одному для каждой комбинации имен/баллов.

подход, как это ваш лучший выбор, поскольку она касается списков разной длины:

var names = [ ... ] ; 
var scores = [ ... ] ; 
var cnt = names.length < scores.length ? names.length : scores.length ; 
var i = j = 0 ; 

// process all matching elements 
while (i < cnt && j < cnt) 
{ 
    process(name[i++] , score[i++]) ; 
} 

// process names w/o scores 
while (i < cnt) 
{ 
    process(names[i++] , null) ; 
} 

// process scores w/o names 
while (j < cnt) 
{ 
    process(null , scores[j++]) ; 
} 

Вы могли бы, конечно, сделать это более лаконично, все в одном цикле, но этот подход делает ваше намерение ясно читатель.

Смежные вопросы