项目中遇到 JS 数组赋值问题,被赋数组 修改了也会改变 源数组。
案例一:
var a = [1,2,3,4]; var b= []; b = a;
这个不是把值赋值过去而是 b 作为 a 的引用,b 改变的是 a
如何 b 指向的是一个新数组,a 把元素值全部赋值过去?
1、普通数组可以使用 var b = [].concat(a);
2、对象数组比较复杂。
案例二:
一个jquery对象类型的数组是 [Object(Array)] 类型,其拼接的数组字符串为:
[{ name: 'Berlin-new', type: 'column', id: 'berlin', data: [-0.9, 0.6, 3.5, 8.4, 13.5, 17.0, 18.6, 17.9, 14.3, 9.0, 3.9, 1.0] },{ name: 'Tokyo-new', type: 'spline', data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6] }]
想将 array 赋给 array2,然后将 array2 中的 data 截取一部分,返回 array2。
var array2= [].concat(array); $.each(array2, function (i, obj) { var data = obj.data; obj.data = data.slice(data.length - num, data.length); });
这样截取成功,但仍然影响 array 本身的 data;
采用 var arr = $.makeArray( obj );后仍不起作用;
最后用循环创建新数组解决
var result = []; $.each(array, function (i, obj) { var c = {}; $.each(obj, function (key, val) { if (key == 'data') { c[key] = val.slice(val.length - num, val.length); } else { c[key]=val; } }) ; result.push(c); });
案例三:
var a = [1,2,3]; var b = a; a = [4,5,6]; alert(b); //[1,2,3] =========================================== var a = [1,2,3]; var b = a; a.pop(); alert(b); //[1,2]
解析:
参考资料:
https://www.cnblogs.com/johnblogs/p/7218344.html
https://www.cnblogs.com/songzk/p/6081883.html