首页 > 解决方案 > JS数组变异

问题描述

为什么第一个函数会改变 originalArr(尽管我创建了 copyArr 以仅在该副本上执行方法)?为什么第二个函数不改变 originalArr?

function removeSmallest(originalArr) {
  const copyArr = originalArr;
  console.log(originalArr);
copyArr.splice(copyArr.indexOf(Math.min(...copyArr)), 1);
  console.log(originalArr); //here originalArr is mutated, why?//
  return copyArr;
}

function removeSmallest(originalArr) {
  const copyArr = [];
  copyArr.push(...originalArr);
  console.log(originalArr);
copyArr.splice(copyArr.indexOf(Math.min(...copyArr)), 1);
  console.log(originalArr); //originalArr not mutated, why?//
  return copyArr;
}

标签: arraysmutationmutation-testing

解决方案


JavaScript 数组通过引用工作,这意味着在第一个函数中,两者都copyArr指向originalArr同一个对象。要复制数组并避免这种情况,您可以使用您在第二个函数中使用的方法,或者简单地使用const copyArr = originalArr.slice().


推荐阅读