JavaScript 怎么对数组进行 回调操作 的不影响原数组?
程序员文章站
2022-04-17 12:47:30
...
举个例子,下面是我做好的:
我为了不影响原数组 arr2 我新创建了一个 arr3 ;
可是最后还是被影响了,
var arr3=new arr2;
var arr3=new arr2();
这个语法又行不通,怎么弄呢?
var arr2 =new Array(10,12,16,18,13,14,15,8,7,6,1,5,2 );
var arr3=arr2;
//重排序;
arr3.sort(function(a,b){if(a==b){return 0;}else if(a>b){return -1;}else{return 1;}});
console.log( arr2.toString() );
console.log( arr3.toString() );
回复内容:
举个例子,下面是我做好的:
我为了不影响原数组 arr2 我新创建了一个 arr3 ;
可是最后还是被影响了,
var arr3=new arr2;
var arr3=new arr2();
这个语法又行不通,怎么弄呢?
var arr2 =new Array(10,12,16,18,13,14,15,8,7,6,1,5,2 );
var arr3=arr2;
//重排序;
arr3.sort(function(a,b){if(a==b){return 0;}else if(a>b){return -1;}else{return 1;}});
console.log( arr2.toString() );
console.log( arr3.toString() );
你是想克隆出来一个新的数组?那这样:
var arr1 = [1, 2, 3];
var arr2 = arr1.slice();
arr2.pop();
console.log(arr1);//[1, 2, 3]
console.log(arr2);//[1, 2]
深拷贝:
var arr3=arr2.slice();
第一段代码没明白什么意思
第二段代码中var arr3=arr2;
和你所想的不一样,你需要补充一下js的基本知识,变量赋值分为传值和传址,数据是一个Object,所有的Object赋值都是传址,所以这里arr3
就是arr2
也就是[1,2,3]
,你需要将arr2进行一个copy,如@hsfzxjy那样
var arr2 =new Array(10,12,16,18,13,14,15,8,7,6,1,5,2 );
// 对需要排序的数字临时存储
var arr3= arr2.map(function(el, i) {
return el;
})
//重排序;
arr3.sort(function(a,b){if(a==b){return 0;}else if(a>b){return -1;}else{return 1;}});
console.log(arr2.toString());//10,12,16,18,13,14,15,8,7,6,1,5,2
console.log(arr3.toString());//18,16,15,14,13,12,10,8,7,6,5,2,1