我有一个嵌套的数组:如何在JavaScript中有效地打印嵌套数组?
[1, 2, [3, 4, [5, [6]], 7], 8, 9]
我怎么能打印在一个优雅的方式是这样的:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
我有一个嵌套的数组:如何在JavaScript中有效地打印嵌套数组?
[1, 2, [3, 4, [5, [6]], 7], 8, 9]
我怎么能打印在一个优雅的方式是这样的:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
function printArray(arr) {
if (typeof(arr) == "object") {
for (var i = 0; i < arr.length; i++) {
printArray(arr[i]);
}
}
else console.log(arr);
}
printArray([1,2,[3,4,[5,[6]],7],8,9]);
我只是将'document.write'改为'console.log'。这是非常糟糕的做法,使用'document.write' –
你可以试试这个,它会汇整阵列。
let a = [1, 2, [3, 4, [5, [6]], 7], 8, 9];
const flatten = arr => arr.reduce((a, b) => a.concat(Array.isArray(b) ? flatten(b) : b), []);
console.log(flatten(a));
其实,你可以在这里找到:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce
这里是另一种解决方案。
function flatten(arr) {
var x;
x = JSON.stringify(arr);
x = "[" + x.replace(/[\[\]]/g, "") + "]";
return JSON.parse(x);
}
console.log(flatten(a));
这是ES6做的另一种方式:
var nested = [1, 2, [3, 4, [5, [6]], 7], 8, 9];
var flat = [].concat(nested);
for(var i = 0; i < flat.length; i++) {
if(Array.isArray(flat[i])) {
flat.splice(i, 1, ...flat[i--]);
}
}
console.log(flat);
结果是:[1,2,3,4,数组[2],7,8,9]在铬或[1,2,3,4,[5 ,[6]],7,8,9]在Firefox中。 –
耶看到它,用一个工作解决方案@Y.C更新了答案。 – Yaser
@Yaser解决方案似乎很优雅。万一你想用ramda
const arr = R.flatten([1, 2, [3, 4, [5, [6]], 7], 8, 9]);
console.log(arr); //[1, 2, 3, 4, 5, 6, 7, 8, 9]
当使用Node.js的使用功能框架,这里的例子,下面给我你的要求几乎什么,只是打印出来的输出没有逗号后的空间:获得在其他环境中相同的结果
console.log('[%s]', [1, 2, [3, 4, [5, [6]], 7], 8, 9]);
阵列上调用toString()
可能是必要的:
console.log('[%s]', [1, 2, [3, 4, [5, [6]], 7], 8, 9].toString());
对我来说,在控制台中显示'[Array [5]]'。 –
查看我的更新回答。 – cybersam
你不是什么优雅的方式? – epascarello
“print”与'console.log'或“print”一样在html中输出? – Jack
'JSON.parse(“[”+ [1,2,[3,4,[5,[6]],7],8,9] .join(“,”)+“]”)' – epascarello