为什么这些返回数组的方式在Javascript中有所不同?

时间:2016-10-16 00:56:41

标签: javascript arrays

我有两个例子:

function myFunction(arr, size) {
  // Break it up.
 var newArray = [];

  var tempArray = arr.splice(0,1);
 newArray.push(arr.splice(0,1));
 console.log(newArray);

  return arr;
}

myFunction(["a", "b", "c", "d"], 2);

这一个:

function myFunction(arr, size) {
  // Break it up.
 var newArray = [];

  var tempArray = arr.splice(0,1);
 newArray.push(tempArray);
 console.log(newArray);

  return arr;
}

myFunction(["a", "b", "c", "d"], 2);

主要区别在于:

 newArray.push(arr.splice(0,1)); // Or newArray.push(tempArray);

为什么第一个示例返回Array [1]而第二个示例返回[" a"]?

我期待得到[" a"]无论我走哪条路,有人可以帮我理解这里发生的事情吗?

我只是试图通过拼接来获取数组的第一个元素(我相信它会返回一个已删除元素的数组)并将此数组推送到我的" newArray"所以我最终可以拥有一个包含每个字符的嵌套数组的数组。即[[""],[" B"],[" C"] ...]

编辑:请忽略"尺寸"参数。 EDIT2:真诚的道歉。我并不担心退货声明。愚蠢的我忘了提。我正在查看我的console.log输出。当我运行脚本并查看控制台时,我得到了数组[1]或[" a"]。

1 个答案:

答案 0 :(得分:2)

这是您需要记住的最重要信息:splice更改原始数组(请阅读:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/splice)。

所以,让我们看看你的第一个功能。这一行:

var tempArray = arr.splice(0,1);

按预期更改arr。但是,当您在下一行中执行此操作时:

newArray.push(arr.splice(0,1));

您正在再次更改arr

另一方面,你的第二个功能只改变一次arr

var tempArray = arr.splice(0,1);
newArray.push(tempArray);

简而言之:只计算在第一个函数中有splice次的次数(2次,将原始数组更改两次)以及在第二个函数中有splice次的次数(1次,仅更改原始数组一次)。

编辑:关于console.log,newArray是一个包含数组的数组,这就是为什么有时你会看到Array[1]的原因。这样做:

console.log(newArray[0]);

现在你会看到["a"]["b"]或其他什么。