JS 数组赋值,引用传递 问题

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


猜你喜欢

转载自blog.csdn.net/qq_30715329/article/details/79817685