[英]Why do these ways of returning arrays differ in Javascript?
我有两个例子:
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”,以便最终得到一个包含嵌套数组的数组,其中每个数组都包含嵌套数组。 即[[“ a”],[“ b”],[“ c”] ...]
编辑:请忽略“大小”参数。 EDIT2:真诚的道歉。 我不担心退货声明。 我笨到忘了提。 我正在查看我的console.log输出。 当我运行脚本并查看控制台时,就是在获取Array [1]或[“ a”]的时候。
这是您需要记住的最重要的信息: 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"]
或其他内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.