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

为什么这些返回数组的方法在Javascript中有所不同?,javascript,arrays,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 myFunct

我举两个例子:

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);
为什么第一个示例返回数组[1],第二个示例返回[“a”]

无论我走哪条路,我都希望得到[“a”],有人能帮我理解这里发生了什么吗

我只是想通过拼接来获取数组的第一个元素(我相信这会返回一个已删除元素的数组),然后将这个数组推到我的“newArray”上,这样我就可以最终得到一个包含每个字符的嵌套数组的数组。即[“a”]、[“b”]、[“c”]…]

编辑:请忽略“大小”参数。
编辑2:真诚的道歉。我不担心回报声明。我真蠢,竟然忘了提。我正在查看我的console.log输出。当我运行脚本并查看控制台时,我会得到数组[1]或[“a”]。

这是您需要记住的最重要的信息:
splice
更改原始数组(请阅读此:)

让我们看看你的第一个函数。这一行:

var tempArray = arr.splice(0,1);
按预期更改arr
。但是,当您在下一行中执行此操作时:

newArray.push(arr.splice(0,1));
您又在更改
arr

另一方面,您的第二个函数仅更改一次:

var tempArray = arr.splice(0,1);
newArray.push(tempArray);
简而言之:只需计算第一个函数中有多少次
拼接
(2次,更改原始数组两次)和第二个函数中有多少次
拼接
(1次,仅更改原始数组一次)

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

console.log(newArray[0]);

现在您将看到
[“a”]
[“b”]
或其他任何内容。

这是您需要记住的最重要的信息:
拼接
更改原始阵列(请阅读此:)

让我们看看你的第一个函数。这一行:

var tempArray = arr.splice(0,1);
按预期更改arr
。但是,当您在下一行中执行此操作时:

newArray.push(arr.splice(0,1));
您又在更改
arr

另一方面,您的第二个函数仅更改一次:

var tempArray = arr.splice(0,1);
newArray.push(tempArray);
简而言之:只需计算第一个函数中有多少次
拼接
(2次,更改原始数组两次)和第二个函数中有多少次
拼接
(1次,仅更改原始数组一次)

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

console.log(newArray[0]);

现在您将看到
[“a”]
[“b”]
或其他任何内容。

在第一个示例中,您将拼接两次<代码>拼接
具有破坏性。您的函数没有返回数组[1]。第一个返回['c','d'],第二个返回['b','c','d'],以响应控制台日志场景。这是我的控制台日志,第一个函数是
[[['b']]
,第二个函数是
[[['a']]]
,在第一个示例中,您要拼接两次<代码>拼接
具有破坏性。您的函数没有返回数组[1]。第一个返回['c','d'],第二个返回['b','c','d'],以响应控制台日志场景。这是我的控制台日志,第一个函数是
[[['b']]
,第二个函数是
[[['a']]]
,这很有道理,但为什么我得到数组[1]?数组[1]是什么意思?如果我拼接了两次,为什么我没有得到[“b”]?你没有得到
[“a”]
。您在第一个函数中得到了
[“c”,“d”]
,在第二个函数中得到了
[“b”,“c”,“d”]
。对不起,我应该更具体一些。我现在不担心实际回报。我只是查看console.log()输出。我将更新我的问题。好的,这是有意义的,但是为什么我得到数组[1]?数组[1]是什么意思?如果我拼接了两次,为什么我没有得到[“b”]?你没有得到
[“a”]
。您在第一个函数中得到了
[“c”,“d”]
,在第二个函数中得到了
[“b”,“c”,“d”]
。对不起,我应该更具体一些。我现在不担心实际回报。我只是查看console.log()输出。我会更新我的问题。