【问题标题】:Modify copied array without modifying the original array js [duplicate]修改复制的数组而不修改原始数组js [重复]
【发布时间】:2021-12-28 07:58:05
【问题描述】:
function checkCashRegister(price, cash, cid) {
  let payBackAmount = cash - price;
  let tempArr = cid.slice();

  for (let i = 0; i < tempArr.length; i++) {
    tempArr[i][1] = 0;
  }
  console.log("cid is", cid);
}
checkCashRegister(19.5, 20, [
  ["PENNY", 1.01],
  ["NICKEL", 2.05],
  ["DIME", 3.1],
  ["QUARTER", 4.25],

  ["ONE", 90],
  ["FIVE", 55],
  ["TEN", 20],
  ["TWENTY", 60],
  ["ONE HUNDRED", 100],
]);

这里我试图从参数化函数中复制一个数组。 cid 是我试图在函数内部传递的数组,我试图将它复制到 tempArr 中。稍后在修改 tempArr 的值时,cid 的值也在发生变化。 我还尝试使用 let tempArr=[...cid]let tempArr=cid.slice(0) 复制值

【问题讨论】:

  • 你做了一个浅拷贝,而不是深拷贝。 cid(顺便说一句很好命名:D)是一个二维数组。如果您从tempArr 添加或删除元素,则cid 不会发生更改,但是,数组的元素 仍然是引用,因为它们也是数组。一种快速而肮脏的方法是const tempArr = JSON.parse(JSON.stringify(cid));
  • @Cid 非常感谢您的解释和链接。我真的认为复制是一样的,因为我只是想复制一个数组的内容。

标签: javascript arrays


【解决方案1】:

在上面的代码中,当您将一个数组复制到另一个数组时,javascript 中的 slice 方法和扩展运算符会执行浅拷贝,对于您的用例,您可能想要对可以执行的对象进行深层克隆 @987654322 @ ,你也可以使用 Lodash 中的 deepClone 来深度克隆一个对象

也请查看此主题What is the difference between a deep copy and a shallow copy? 以了解有关浅克隆和深度克隆的更多信息

【讨论】:

    猜你喜欢
    • 2020-05-22
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 2018-09-20
    • 2018-01-12
    • 1970-01-01
    相关资源
    最近更新 更多