引言
设为推送数组中值的递归函数。 我从功能块初始化数组。数组在函数外部初始化的事实不应该是一个问题,而javascript函数的属性是操纵在此范围之外定义的变量。 请参阅下文,相同的片段分为2个版本,第一个带有一般范围内的数组,第二个带有2个嵌套函数。结果也粘贴了,它是一样的。 但是当arrray在函数外部初始化时,此代码不会通过fcc练习中的测试。
- 第一个代码段:未通过测试。
var newArr = [];
function steamroller(arr) {
while (arr.length > 0) {
if (Array.isArray(arr[0])) {
steamroller(arr[0]);
}
else {newArr.push(arr[0]);
console.log("newArr ", newArr);
}
arr.shift();
}
// I'm a steamroller, baby
return newArr;
}
steamroller([1, {}, [3, [[4]]]]);
和他的输出输出:
Native Browser JavaScript
newArr [ 1 ]
newArr [ 1, {} ]
newArr [ 1, {}, 3 ]
newArr [ 1, {}, 3, 4 ]
=> [ 1, {}, 3, 4 ]
- 第二个代码段通过了测试:
function steamroller(arr) {//1
var newArr = [];
function ude(arr){//2
while (arr.length > 0) {//3
if (Array.isArray(arr[0])) {//4
ude(arr[0]);
}//4c
else {newArr.push(arr[0]);
console.log("newArr ", newArr);
}//3c
arr.shift();
}
// I'm a steamroller, baby
return newArr;
}
return ude(arr);
}
steamroller([1, {}, [3, [[4]]]]);
和他的输出:
Native Browser JavaScript
newArr [ 1 ]
newArr [ 1, {} ]
newArr [ 1, {}, 3 ]
newArr [ 1, {}, 3, 4 ]
=> [ 1, {}, 3, 4 ]
问题:
有什么区别?
答案 0 :(得分:0)
也许这对你有所帮助。每个对象都有一个内置的toString
方法。
toString()
方法返回表示指定数组及其元素的字符串。语法
arr.toString()
<强>参数强>
无。
描述
Array对象会覆盖Object的toString方法。对于Array对象,toString方法连接数组并返回一个字符串,其中包含用逗号分隔的每个数组元素。
编辑:
如何使用本地数组收集元素的示例。
function steamroller(arr) {
var newArr = [];
while (arr.length) {
if (Array.isArray(arr[0])) {
newArr = newArr.concat(steamroller(arr[0]));
} else {
newArr.push(arr[0]);
}
arr.shift();
}
return newArr;
}
document.write('<pre>' + steamroller([1, {}, [3, [[4]]]]) + '</pre>');
document.write('<pre>' + JSON.stringify(steamroller([1, {}, [3, [[4]]]]), 0, 4) + '</pre>');
答案 1 :(得分:0)
答案是该程序由浏览器测试,具有许多连续值。 但阵列名为&#34; newArray&#34;两次测试之间不会清空,因为每当我们启动函数时,它都不会在她是全局变量时重置。很简单。