Heim  >  Artikel  >  Backend-Entwicklung  >  JavaScript 怎么对数组进行 回调操作 的不影响原数组?

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

WBOY
WBOYOriginal
2016-06-06 20:12:52896Durchsuche

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

我为了不影响原数组 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>
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn