项目中遇到 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