为什么这些返回数组的方法在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()输出。我会更新我的问题。