欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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