2016-02-16 5 views
-4

Я хочу объединить некоторые массивы определенным образом. Что это выглядит сейчас:Javascript array merge

[key1, key2, key3, key4] 
[val1, val2, val3, val4] 
[val1, val2, val3, val4] 
[val1, val2, val3, val4] 
[val1, val2, val3, val4] 

Как я хочу, чтобы это выглядело в конце концов де

[key1, val1, val1, val1, val1] 
[key2, val2, val2, val2, val2] 
[key3, val3, val3, val3, val3] 
[key4, val4, val4, val4, val4] 

Надеется, что вы, ребята, есть решение для меня спасибо!

PS: Если что-то недостаточно ясно, просто комментарий.

+0

'key1' для всех массивов в выходе? Не 'key2',' key3' и т. Д.? – Andy

+2

Также добавьте код, который вы уже пробовали на свой вопрос. – Andy

+0

К сожалению, вы правы, это должно быть key2, key3 и т. Д. –

ответ

0

Просто измените строку и столбец. В основном это: r[j][i] = x[i][j]

var data = [['key1', 'key2', 'key3', 'key4'], ['val11', 'val21', 'val31', 'val41'], ['val12', 'val22', 'val32', 'val42'], ['val13', 'val23', 'val33', 'val43'], ['val14', 'val24', 'val34', 'val44']], 
 
    pivot = function (data) { 
 
     var r = []; 
 
     data.forEach(function (a, i) { 
 
      a.forEach(function (b, j) { 
 
       r[j] = r[j] || []; 
 
       r[j][i] = b; 
 
      }); 
 
     }); 
 
     return r; 
 
    }(data); 
 

 
document.write('<pre>' + JSON.stringify(pivot, 0, 4) + '</pre>');

+0

Это может быть решение, но дело в том, что массивы динамические, поэтому он не имеет фиксированного индекса. Например, ключ имеет 30 значений, а массивы значений также имеют 30 значений, которые будут работать? –

+0

@ LeroySteding, почему бы и нет, попробуйте с вашими данными. –

+0

Кажется, что данные не упорядочены правильно, некоторые из значений находятся в тех местах, где они не принадлежат haha ​​im, которые ищут его прямо сейчас! –

0

Вы можете создать массив из этих массивов и заполнения новых массивов, как показано ниже:

var array1 = ["key1", "key2", "key3", "key4"]; 
var array2 = ["val1", "val2", "val3", "val4"]; 
var array3 = ["val1", "val2", "val3", "val4"]; 
var array4 = ["val1", "val2", "val3", "val4"]; 
var array5 = ["val1", "val2", "val3", "val4"]; 

allArrays = [array1,array2,array3,array4,array5]; 
array11 = [] 
array22 = [] 
array33 = [] 
array44 = [] 
for(var i = 0; i < allArrays.length; i++){ 
    array11.push(allArrays[i][0]); 
    array22.push(allArrays[i][1]); 
    array33.push(allArrays[i][2]); 
    array44.push(allArrays[i][3]); 

} 

https://jsfiddle.net/fh1ou9c2/