1
编写一个 JavaScript 函数,接受一个仅包含数字的 多维数组 ,返回拍平以后的结果。例如传入:[1, [[2], 3, 4], 5],返回 [1, 2, 3, 4, 5]。
(本题来源:阿里巴巴前端笔试题)
const arr = [1, [[2], 3, 4], 5];
const flatten = arr => {
return arr.reduce((flat, toFlat) => {
return flat.concat(Array.isArray(toFlat) ? flatten(toFlat) : toFlat);
}, []);
};
const res = flatten(arr);
console.log(res);
2
编写一个 JavaScript generator 函数,接受一个仅包含数字的 多维数组 ,返回一个迭代器,可以遍历得到它拍平以后的结果。例如:
const numbers = flatten2([1, [[2], 3, 4], 5])
numbers.next().value // => 1
numbers.next().value // => 2
numbers.next().value // => 3
numbers.next().value // => 4
numbers.next().value // => 5
答案:
function* flatten2(a) {
var length = a.length;
for (var i = 0; i < length; i++) {
var item = a[i];
if (typeof item !== 'number') {
yield* flatten2(item);
} else {
yield item;
}
}
}