#javascript #arrays #object
#javascript #массивы #объект
Вопрос:
У меня есть массив объектов, каждый объект содержит 2 свойства, месяц и количество. значение count по умолчанию равно 0. У меня есть другой массив объектов, который я извлекаю из файла json с разными значениями количества. Я пытаюсь заменить значение счетчика из 2-го массива на 1-й.
например
array1[
{
month:1,
count:0
},
{
month:2,
count:0
},
{
month:3,
count:0
}
{
month:4,
count:0
}
etc...
]
array2[
{
month:1,
count:5
},
{
month:2,
count:3
},
{
month:3,
count:9
}
{
month:5,
count:4
}
etc...
]
Моя проблема в том, что мой 2-й массив короче, так как отсутствует несколько месяцев (из-за отсутствия значений для них в БД), в этом случае я хотел бы пропустить и перейти к следующему объекту. таким образом, конечный результат будет выглядеть так,
array1[
{
month:1,
count:5
},
{
month:2,
count:3
},
{
month:3,
count:9
},
{
month:4,
count:0
}
{
month:5,
count:4
}
etc...
]
мой код до сих пор
var array1 = [];
for (var i = 1; i <= 12; i ) {
array1.push({
month: i,
count: 0
})
}
$.getJSON(url, function (data) {
for (var i = 0; i < data.length; i ) {
if (array1[i].month == data[i].month) { //work until month 4
array1[i].count = data[i].count
}
});
console.log(array1);
Ответ №1:
Если у вас всегда есть месяцы года в вашем массиве, то вы можете использовать месяц в качестве индекса для исходного массива и обновлять при необходимости.
for (var i = 0; i < data.length; i ) {
array1[data[i].month - 1].count = data[i].count;
}
Ответ №2:
Результат будет в первом массиве:
function mergeArrays(arr1, arr2) {
arr1.forEach(function(item1) {
var item2 = arr2.find(function (item2) {
return item2.month === item1.month;
});
if (item2) {
Object.assign(item1, item2);
}
})
}