首页 > 解决方案 > 编写我的 Array.prototype.flat() 版本

问题描述

var each = function(collection, iterator) {
    if (Array.isArray(collection)) {
      for (var i = 0; i < collection.length; i++) {
        iterator(collection[i], i, collection);
      }
    } else {
      for (var key in collection) {
        iterator(collection[key], key, collection);
      }
    }
  };

  var flatten = function(nestedArray, result) {
    var result = [];

    each(nestedArray, function(element) {
      console.log(element);
      if (!Array.isArray(element)) {
        result.push(element)
      } else {
        flatten(element)
      }
    })
    return result;
  };

flatten([1, 2, [3]]);

我正在编写我自己的 flatten 版本,它应该通过返回一个新数组来展平给定的数组,该数组只有一个数组中的值,没有嵌套。我解决了这个问题,如果给定数组中的一个元素是嵌套的,那么将它插回flatten. 例如,当我的程序到达[3]输入的索引 2[3]时,它会在 flatten 中作为参数,它nestedArray在函数中采用 的值。然后它应该遍历nestedArray对象并检查它是否element是一个数组。在通过将[3]每个元素记录到屏幕的情况下,我看到它[3]确实进入了flatten函数并具有值3作为结果。这个价值应该被推入我的result变量,但我只得到[1, 2]. 我不明白为什么,但我怀疑它被推入的结果变量不是包含所有先前被推入的元素的原始结果变量?

标签: javascriptflatten

解决方案


推荐阅读