使用for-of更新数组对象

Sen*_*nal 0 javascript arrays for-loop

我有以下两个对象数组.我要做的是如果id属性匹配,用数组x项替换数组y项.

我可以从一个普通的for循环中轻松实现这一点.但我不明白为什么我的for-of循环返回不同的结果.

let x1 = [{
  id: '1',
  a: 1,
  b: 2
}];

let y1 = [{
  id: '1',
  c: 3,
  b: 2
}];

let x2 = [{
  id: '1',
  a: 1,
  b: 2
}];

let y2 = [{
  id: '1',
  c: 3,
  b: 2
}];



let updateX1 = (x, y) => {

  for (let itemY of y) {

    for (let itemX of x) {

      if (itemY.id === itemX.id) {
        itemX = itemY;
      }
    }
  }

  return x;
}

let updateX2 = (x, y) => {

  for (let i = 0; i < y.length; i++) {

    for (let j = 0; j < x.length; j++) {

      if (y[i].id === x[j].id) {
        x[j] = y[i];
      }
    }
  }

  return x;
}

console.log(updateX1(x1, y1));
console.log(updateX2(x2, y2));
Run Code Online (Sandbox Code Playgroud)

为什么我对上述两种方法得到两种不同的结果?提前致谢!

Cer*_*nce 5

重新分配变量本身永远不会改变现有对象,或者至少不在非常奇怪的情况之外.当你这样做

itemX = itemY;
Run Code Online (Sandbox Code Playgroud)

你只是改变itemX变量指向的值itemY.原来的东西itemX和来自的对象itemX不会改变.为了变异的对象,你总是必须明确一个新值分配给属性的对象,如与obj.foo,obj['foo']或,在你的代码,x[j] = y[i];.