开发过程中遇到了 js 数组赋值问题,新数组的改变会影响原数组,记录如下:
1 2 3 4 5 6 7
| var arr = [1, 2, 3]; console.log(arr); var newArr = arr; console.log(newArr); newArr[0] = 2; console.log(arr); console.log(newArr);
|
这种情况,赋值的时候使用以下方法就可以实现改变新数组不影响原数组:
1 2 3 4 5 6 7
| var arr = [1, 2, 3]; console.log(arr); var newArr = [].concat(arr); console.log(newArr); newArr[0] = 2; console.log(arr); console.log(newArr);
|
但是,当 arr 为一个对象数组时,以上方法就不可行了,记录如下:
1 2 3 4 5 6 7 8 9
| var arr = [{ id: 1, name: "a" }]; console.log(arr); var newArr = [].concat(arr); console.log(newArr); newArr.map((item, index) => { item.name = "b" }) console.log(arr); console.log(newArr);
|
这种情况,要使用循环创建新数组的方式赋值:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| var arr = [{ id: 1, name: "a" }]; console.log(arr); var newArr = []; $.each(arr, function (i, obj) { var c = {}; $.each(obj, function (key, val) { c[key] = val;
}); newArr.push(c) }) console.log(newArr); newArr.map((item, index) => { item.name = "b" }) console.log(arr); console.log(newArr);
|