我不确定为什么示例1没有给出与示例2相同的结果。
示例1:
var a = [1,6,2,4];
var b = [];
function minT(data){
var d = [];
d = data;
d.sort(function(a, b){return a-b});
return d;
};
b = minT(a)
console.log("b =" + b);
console.log("a =" + a);
结果:
b =1,2,4,6
a =1,2,4,6
例2:
var a = [1,6,2,4];
var b = [];
function minT(data){
var d = [];
d = data.slice(0,10);
d.sort(function(a, b){return a-b});
return d;
};
b = minT(a)
console.log("b =" + b);
console.log("a =" + a);
结果:
b = 1,2,4,6
a = 1,6,2,4
为什么示例1影响数组a?
如何编写不影响数组a的函数minT
。 (函数内没有切片)?
答案 0 :(得分:0)
您第一次尝试对a
数组进行排序的原因还在于d = data;
只复制对象引用,因此两个变量都指向内存中的相同位置。
执行d = data.slice(0,10);
时,您将slice
操作的结果分配给d
变量,该变量是内存中与data
变量不同的对象指着。
查看this book excerpt有关值与参考值之间差异的信息。
答案 1 :(得分:0)
在示例1中:
您已撰写d=data
。这意味着d指向元素data
。您还没有复制这些值。
示例2:
您已撰写d=data.slice(0,10)
。它实际上复制了数据元素,而不是复制data
的地址。
现在,要编写函数minT而不影响data
,并且不使用函数data.slice()
,您只需要用自己的简单代码替换行data.slice()
来复制一个元素阵列到另一个。
这就是我所做的:
function minT(data){
var d = [];
for(var i=0;i<data.length;i++)
d[i]=data[i];
d.sort(function(a, b){return a-b});
return d;
};