压平数组迭代,递归,并在javascript中应用

时间:2017-02-06 19:01:43

标签: javascript recursion iteration apply flatten

我接受了一次采访,我准备的一个问题是迭代地,递归地和使用apply来压扁数组。

我想出了一些不同的解决方案,但它们都是从另一个借用属性。我的迭代解决方案使用apply,我构建的两个递归的解决方案使用某种形式的迭代。

您觉得这些解决方案会被接受吗?如果不是,我怎么能改进它们以符合期望?

递归:

 var flattenArrRecursive = arr => {
  var flattened = [];
  arr.forEach(item => {
    if(Array.isArray(item)) {
      flattened.push(...flattenArrRecursive(item));
      //flattened.push.apply(flattened, flattenArrRecursive(item));
    } else {
      flattened.push(item);
    }
  })
  return flattened;
}

迭代/申请:

var flattenArrIterative2 = arr => {
  var result = [];
  var todo = [arr];
  while(todo.length) {
    var current = todo.shift();
    if(Array.isArray(current)) {
      todo.unshift.apply(todo, current);
    } else {
      result.push(current);
    }
  }
  return result;
}

你会接受这些作为问题的解决方案吗?

我也有这个递归函数,但我没有完全自己编写,也不想使用它。

var flattenArrRecursive = arr =>
  //reduce runs if statement on each element, similar to forEach but removes element from original arr in the process
  arr.reduce((a, b) =>
    a.concat(Array.isArray(b) ? flattenArrRecursive(b): b), []
  );

0 个答案:

没有答案