2016-02-27 3 views
-2

У меня есть объект, который содержит 3 массивы, как это:цикл через массивы внутри объекта с JavaScript

{ 
    "year": [ 
    "1980", 
    "1970" 
    ], 
    "month": [ 
    "01", 
    "01" 
    ], 
    "day": [ 
    "1", 
    "1" 
    ] 
} 

я хочу, чтобы преобразовать его в нечто вроде этого:

['1980-01-1','1970-01-1'] 

Как я могу сделайте это, используя знак подчеркивания js или jQuery или чистый js?

+1

С петлей? Вы что-то пробовали? Можно ли предположить, что все три массива гарантированно имеют одинаковое количество элементов? – nnnnnn

+0

Вы хотите пройти все возможные комбинации лет, месяцев и дней? Все ли массивы имеют одинаковую длину? – SpiderPig

+0

Нет Я хочу создать строку из первого элемента в каждом массиве, втором и т. Д. и да, длины одинаковы. –

ответ

1

Это предложение использует Array#map() и массив для ключей.

var data = { "year": ["1980", "1970"], "month": ["01", "01"], "day": ["1", "1"] }, 
 
    result = function (data) { 
 
     var i = 0, 
 
      keys = ['year', 'month', 'day'], 
 
      result = []; 
 
     while (i < data[keys[0]].length) { 
 
      result.push(keys.map(function (k) { 
 
       return data[k][i]; 
 
      }).join('-')); 
 
      i++; 
 
     } 
 
     return result; 
 
    }(data); 
 

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

0

Вы можете дать год, месяц и день массивы lodash#zip, которые превратят их в массив [[year, month, day], ...], а затем Array#map, что массив с Array#join построить массив ['year-month-day', ...]:

_.zip(myArray.year, myArray.month, myArray.day).map(function(arr) { 
    return arr.join('-'); 
}); 

Это решение не требует дополнительных переменных и является более functional programming.

+0

Предлагаю вам добавить какое-то объяснение –

+0

@AlbertoBonsanto True, обновлено. Также упрощено. – vesse

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