PHP8.1.21版本已发布
vue8.1.21版本已发布
jquery8.1.21版本已发布

JavaScript 怎么对数组进行 回调操作 的不影响原数组?

原创
2016-06-06 20:12:52 802浏览

举个例子,下面是我做好的:

我为了不影响原数组 arr2 我新创建了一个 arr3 ;
可是最后还是被影响了,

<code>var arr3=new arr2;
var arr3=new arr2();</code>

这个语法又行不通,怎么弄呢?

<code>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() );</code>

回复内容:

举个例子,下面是我做好的:

我为了不影响原数组 arr2 我新创建了一个 arr3 ;
可是最后还是被影响了,

<code>var arr3=new arr2;
var arr3=new arr2();</code>

这个语法又行不通,怎么弄呢?

<code>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() );</code>

你是想克隆出来一个新的数组?那这样:

<code class="javascript">var arr1 = [1, 2, 3];

var arr2 = arr1.slice();
arr2.pop();

console.log(arr1);//[1, 2, 3]
console.log(arr2);//[1, 2]</code>

深拷贝:

<code>var arr3=arr2.slice();</code>

第一段代码没明白什么意思
第二段代码中var arr3=arr2;和你所想的不一样,你需要补充一下js的基本知识,变量赋值分为传值和传址,数据是一个Object,所有的Object赋值都是传址,所以这里arr3就是arr2也就是[1,2,3],你需要将arr2进行一个copy,如@hsfzxjy那样

<code class="javascript">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</code>
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。