我试图将任何长度的嵌套数组展平为单个数组。为什么它显示数组而不是数组值?
function flatten(arr){
var res = [];
for (var i = 0; i < arr.length; i++){
if (toString.call(arr[i]) === "[object Array]"){
res.push(flatten(arr[i]));
}else{
res.push(arr[i]);
}
}
return res;
}
flatten([1,2,[3,[4,5,[6]]],7,8]) // [1, 2, Array(2), 7, 8]
答案 0 :(得分:1)
您正在推送res
flatten
的结果,这是一个数组。而是Array#concat内部flatten
调用res
的结果,并将结果分配给res
。
注意:要识别数组,您可以使用Array#isArray。
function flatten(arr) {
var res = [];
for (var i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
res = res.concat(flatten(arr[i]));
} else {
res.push(arr[i]);
}
}
return res;
}
console.log(flatten([1, 2, [3, [4, 5, [6]]], 7, 8])); // [1, 2, Array(2), 7, 8]
&#13;
答案 1 :(得分:1)
您可以使用concat
代替push
和reduce
代替for
循环。
const flatten = data => data.reduce((r, e) => {
return r = r.concat(Array.isArray(e) ? flatten(e) : e), r
}, [])
console.log(flatten([1, 2, [3, [4, 5, [6]]], 7, 8]))
答案 2 :(得分:0)
您可以按如下所示在数组上使用flat()方法。
if (Array.isArray(this.tickets)) {
this.tickets.filter(...)
} else {
// do something
}