如何在js中比较和替换一个数组中的值到另一个数组?

时间:2016-10-10 12:57:32

标签: javascript arrays object

我有一个对象数组,每个对象包含2个属性,month&计数。 count的默认值为0.我有另一个对象数组,我从具有不同计数值的json文件中提取。我试图将第二个数组的计数值替换为第一个。

例如

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...
]

我的问题是我的第二个数组较短,因为有几个月缺失(由于db中没有它们的值)在这种情况下我想跳过并转到下一个对象。所以最终结果看起来像这样,

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);

2 个答案:

答案 0 :(得分:1)

如果你的数组中一年中的总是,那么你可以使用月份作为原始数组的索引,并在必要时进行更新。

for (var i = 0; i < data.length; i++) {
    array1[data[i].month - 1].count = data[i].count;
}

答案 1 :(得分:1)

结果将在第一个数组中:

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);
        }
    })
}