跳转到正文
Lishude's Web Note
返回

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

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


上一篇
使用 Object.create(null) 代替大括号生成({})对象
下一篇
JS事件中target与currentTarget区别