当前位置: 首页 > 知识库问答 >
问题:

如何在JavaScript中扁平化嵌套数组?[副本]

史英睿
2023-03-14

如我们所知,要使用reduce()方法对数组[[0,1],[2,3],[4,5]]进行展平

var flattened = [[0, 1], [2, 3], [4, 5]].reduce(function(a, b) {
  return a.concat(b);
});

那么如何将这个数组[[[0],[1]],[[2],[3]],[[4],[5]]平坦化为[0,1,2,3,4,5]呢?

共有1个答案

何章横
2023-03-14

这是递归的一种替代方法(请参见这里的jsfiddle),并且应该接受避免堆栈溢出的任何深度级别。

var array = [[0, 1], [2, 3], [4, 5, [6, 7, [8, [9, 10]]]]];
console.log(flatten(array), array); // does not mutate array
console.log(flatten(array, true), array); // array is now empty

// This is done in a linear time O(n) without recursion
// memory complexity is O(1) or O(n) if mutable param is set to false
function flatten(array, mutable) {
    var toString = Object.prototype.toString;
    var arrayTypeStr = '[object Array]';
    
    var result = [];
    var nodes = (mutable && array) || array.slice();
    var node;

    if (!array.length) {
        return result;
    }

    node = nodes.pop();
    
    do {
        if (toString.call(node) === arrayTypeStr) {
            nodes.push.apply(nodes, node);
        } else {
            result.push(node);
        }
    } while (nodes.length && (node = nodes.pop()) !== undefined);

    result.reverse(); // we reverse result to restore the original order
    return result;
}
 类似资料:
  • 问题内容: 如我们所知,通过使用方法将数组展平 那么如何将此数组展平到? 问题答案: 这是递归的一种替代方法,并且应接受任何深度级别,以避免堆栈溢出。

  • 注意:这个问题被简单地标记为这个问题的重复,但它不是完全的重复,因为我是专门询问std::optionals的。如果你关心一般情况,还是一个很好的问题。 假设我有嵌套的选项,如下所示(愚蠢的玩具示例): 还有这个垃圾邮件功能: 什么是压扁这张可选支票的最佳方法?我做了这样的东西,它不是可变的,但我不太关心这个(如果真的需要,我可以再添加一个级别(用),而且超出这个级别的所有东西都是可怕的代码)。

  • 问题内容: 我具有列表的以下元素,并且列表的长度为100个元素。 如何将每个元素转换为如下形式? 问题答案: 元组打包和解包解决了该问题。

  • 问题内容: 此问题特定于从[GitHub Repo使用:flatten](https://github.com/amirziai/flatten) 该软件包位于pypi flatten-json 0.1.7上,可以与 此问题特定于软件包的以下组件: 使用递归展平嵌套 用Python递归思考 在Python中展平JSON对象 嵌套如何?: 已用于解压缩最终超过100000列的文件 展平的JSON是否

  • 背景: 需要将扁平化数组转换成树形数组。 比如原始数组如下: 期望转换后的数据

  • 本文向大家介绍Python中的扁平化嵌套列表迭代器,包括了Python中的扁平化嵌套列表迭代器的使用技巧和注意事项,需要的朋友参考一下 假设我们有一个嵌套的整数列表;我们必须实现一个迭代器以使其扁平化。每个元素可以是整数,也可以是列表。该列表的元素也可以是整数或其他列表。因此,如果输入类似于[[1,1],2,[1,1]],则输出将为[1,1,2,1,1,1] 为了解决这个问题,我们将遵循以下步骤-