阿里巴巴前端笔试题:数组拍平

Jan 30 2019 Node.js

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 // => 1
numbers.next().value // => 2
numbers.next().value // => 3
numbers.next().value // => 4
numbers.next().value // => 5

答案:

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;
}
}
}