1
编写一个 JavaScript 函数,接受一个仅包含数字的 多维数组 ,返回拍平以后的结果。例如传入:[1, [[2], 3, 4], 5]
,返回 [1, 2, 3, 4, 5]
。
(本题来源:阿里巴巴前端笔试题)
1 2 3 4 5 6 7 8 9 10 11
| 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 函数,接受一个仅包含数字的 多维数组 ,返回一个迭代器,可以遍历得到它拍平以后的结果。例如:
1 2 3 4 5 6
| const numbers = flatten2([1, [[2], 3, 4], 5]) numbers.next().value numbers.next().value numbers.next().value numbers.next().value numbers.next().value
|
答案:
1 2 3 4 5 6 7 8 9 10 11
| 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; } } }
|