2016-04-11 4 views
-4

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

// the 2 initial arrays: 
var arr1 = ["Quote1", "Quote2", "Quote3"]; 
var arr2 = ["Author1", "Author2", "Author3"]; 

// the output I need to achieve: 
[ ["Quote1", "Author1"], ["Quote2", "Author2"], ["Quote3", "Author3"] ]; 

Проблема заключается в том, что мой код производит следующий вывод в console.log:

Array [ Array[2], Array[2], Array[2] ] 

Проблематика выход я получаю не показывает фактические значения каждого Subarray, он показывает только длину каждого подмассива.

Вот мой код:

var quotesArr = ["Quote 1", "Quote 2", "Quote 3"]; 

var authorsArr = ["Author 1", "Author 2", "Author 3"]; 

var quoteMeetsAuthor = []; 

var quotesAndAuthors = []; 


function combineArrays(quotes,authors) { 
    if (quotes.length != authors.length) { 
    console.log("Danger Will Robinson!"); 
    return "Danger Will Robinson!"; 
    } 

    for (i=0; i<quotes.length; i++) { 
    quoteMeetsAuthor.push(quotes[i]); 
    quoteMeetsAuthor.push(authors[i]); 
    quotesAndAuthors.push(quoteMeetsAuthor); 
    quoteMeetsAuthor = []; 
    } 
    console.log(quotesAndAuthors); 
    return quotesAndAuthors; 
} 

combineArrays(quotesArr, authorsArr); 
Может

кто-нибудь дать совет?

Редактировать: Я хотел бы решить эту проблему с помощью ванильного javascript.

+0

google zip javascript arrays. Многие библиотеки (lodash, underscore и т. Д.) Реализуют эту функцию, Рамда - моя любимая. –

+1

Код выглядит отлично, и вывод в FireFox также правилен. – Kenney

+2

Ваш код работает. Ваша консоль не отображает массив, как вы хотите. Используйте другой браузер, в котором есть консоль, которая ведет себя так, как вы хотите. Или стройте массив. – Oriol

ответ

-1

Вот что я придумал, чтобы решить вашу проблему. Кроме того, попробуйте использовать alert() вместо console.log(), чтобы увидеть истинные результаты. console.log() иногда не отображает все, и поэтому вам нужно развернуть часть того, что он хранит:

var arr1 = ["Quote1", "Quote2", "Quote3"]; 
var arr2 = ["Author1", "Author2", "Author3"]; 

// the output I need to achieve: 
//[ ["Quote1", "Author1"], ["Quote2", "Author2"], ["Quote3", "Author3"] ]; 

var newArr = [[],[],[]]; 

for(var i = 0; i < newArr.length; i++){ 
    newArr[i].push(arr1[i]); 
    newArr[i].push(arr2[i]); 
} 

alert(newArr); 
+0

Спасибо @paulg, но мне нужно программно масштабировать это для моей фактической потребности (т. Е. - более трех элементов в каждом начальном массиве), поэтому жесткое кодирование количества подмассивов, которые я буду после, не будет работать. –

+0

Но вы были правы, предлагая использовать alert() - выход из этого действительно был тем, чего я ожидал, спасибо! –

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