2013-02-11 5 views
1

У меня есть два массива. Как я могу объединить их в один многомерный массив?Как объединить два массива в один двумерный массив?

Первый массив:

var arrayA = ['Jhon, kend, 12, 62626262662', 
       'Lisa, Ann, 43, 672536452', 
       'Sophie, Lynn, 23, 636366363']; 

Мой другой массив имеет значения:

var arrayB = ['Jhon', 'Lisa', 'Sophie']; 

Как я мог получить массив с этим форматом ??

var jarray = [['Jhon', ['Jhon, kend, 12, 62626262662']], 
       ['Lisa', ['Lisa, Ann, 43, 672536452']], 
       ['Sohphie', ['Sophie, Lynn, 23, 636366363']]] 
+4

Это называется «сжать», вот [реализация JavaScript] (http://stackoverflow.com/a/10284006/989121) , – georg

+1

Спасибо за этот вопрос ... Помогли –

ответ

4
var jarray = []; 
for (var i=0; i<arrayA.length && i<arrayB.length; i++) 
    jarray[i] = [arrayB[i], [arrayA[i]]]; 

Однако, я бы не назвал это «многомерный массив» - это, как правило, относится к массивам, которые включают в себя элементы одного и того же типа. Также я не уверен, почему вы хотите, чтобы вторая часть ваших массивов была одноэлементным массивом.

+0

Хотя вы хотите убедиться, что массивы имеют одинаковую длину (или используют длину меньшего размера). – iamnotmaynard

+1

@iamnotmaynard: Я уже использую длину меньшего. Разумеется, было бы более элегантным выражение 'for (var i = 0, l = Math.min (arrayA.length, arrayB.length); i Bergi

+0

А, я вижу, я обменял их. Исправлено. – Bergi

0

Вы можете использовать Underscore.js http://underscorejs.org/#find Смотрит через каждое значение в списке, возвращая первый, который проходит тест правды (итератор). Функция возвращает, как только находит приемлемый элемент и не пересекает весь список.

var even = _.find([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; }); 
=> 2 

Затем вы можете сделать то же самое с элементами массива B и кодом, сделать соединение.

+2

Хм, действительно нет. Потому что ему нужно найти элементы в массивах A и B. И если он делает for (var i = 0; i MrMins

0

Это то, что я сделал, чтобы получить то, что вы просили:

var jarray = []; 
for (var i = 0; i < arrayB.length; i++) { 
    jarray[i] = []; 
    jarray[i].push(arrayB[i]); 
    var valuesList = [], 
     comparator = new RegExp(arrayB[i]); 
    for (var e = 0; e < arrayA.length; e++) {  
     if (comparator.test(arrayA[e])) { 
      valuesList.push(arrayA[e]); 
     }   
    } 
    jarray[i].push(valuesList); 
} 
Смежные вопросы