如何从另一个对象数组更新一个对象数组中不存在的值?

时间:2019-07-01 07:09:40

标签: javascript arrays

我有两个包含大量数据的对象数组。 这两个数组的结构是这样的。

arr1 = [
  {x: 1, y: '2018-01-01'}, 
  {x: 2, y: '2018-01-02'},           
  {x: 3, y: '2018-01-03'},
  {x: 5, y: '2018-01-05'},
....
]
arr2 = [
  {x: 1, y: '2018-01-01'}, 
  {x: 2, y: '2018-01-02'},           
  {x: 3, y: '2018-01-03'},
  {x: 4, y: '2018-01-04'},
  {x: 5, y: '2018-01-05'},
  {x: 6, y: '2018-01-08'}
]

我要更新arr2,使其使用仅在arr1中存在的值更新对象数组,并删除在arr1中不存在的任何值。请注意,我要更新原始的arr2,而不要返回新的数组。

我尝试遍历单个数组,并删除不存在但不走运的值。

1 个答案:

答案 0 :(得分:0)

您可以获得一张地图,并从头开始进行迭代以拼接未知项或更新更改后的值。

var arr1 = [{ x: 1, y: '2018-01-01x' }, { x: 2, y: '2018-01-02' }, { x: 3, y: '2018-01-03' }, { x: 5, y: '2018-01-05' }],
    arr2 = [{ x: 1, y: '2018-01-01' }, { x: 2, y: '2018-01-02' }, { x: 3, y: '2018-01-03' }, { x: 4, y: '2018-01-04' }, { x: 5, y: '2018-01-05' }, { x: 6, y: '2018-01-08' }],
    map = arr1.reduce((m, { x, y }) => m.set(x, y), new Map),
    i = arr2.length;

while (i--) {
    if (map.has(arr2[i].x)) {
        if (map.get(arr2[i].x) !== arr2[i].y) {
            arr2[i].y = map.get(arr2[i].x);
        }
    } else {
        arr2.splice(i, 1);
    }
}

console.log(arr2);
.as-console-wrapper { max-height: 100% !important; top: 0; }