变量相等

时间:2014-12-29 13:34:16

标签: javascript arrays function

我不确定为什么示例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。 (函数内没有切片)?

2 个答案:

答案 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;
};