当前位置: 首页 > 面试题库 >

如何在JavaScript中展平嵌套数组?

阙佐
2023-03-14
问题内容

如我们所知,[[0, 1], [2, 3], [4, 5]]通过使用方法将数组展平reduce()

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]


问题答案:

这是递归的一种替代方法,并且应接受任何深度级别,以避免堆栈溢出。

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;

}


 类似资料:
  • < code>[[{header=C,value=dsd},{header=D,value=test},{header=E,value=e},{header=F,value=hhh},{header=G,value=ghgh}]] 上面是JsonLists数组的数组,我需要将外部数组扁平化为JsonLists的内部数组。 我最终也只会从JsonList中获取值,并将这些值放入它自己的单独数组中:

  • 如我们所知,要使用方法对数组进行展平 那么如何将这个数组平坦化为呢?

  • 我有一门java课 在上面的场景中,示例具有子示例,这又是示例列表。此嵌套可以是 n 级。我想实现的是有一个示例列表,即扁平化上面的对象并将所有示例收集到最终列表中(收集所有n级示例)。一个明显的方法是递归。在Java中有什么方法可以更有效地实现它。我尝试了一些java 8概念,但它们不符合要求。

  • 问题内容: 我正在尝试将json文件加载到熊猫数据框。我发现有一些嵌套的json。以下是示例json: 我使用以下代码将json加载到数据帧中: 以下是df.head()的输出 但是我发现了两个嵌套的列,例如位置和标签。 我尝试使用以下代码对其进行展平: 它显示了如下错误: 您能建议我如何展平位置和标签(那些具有嵌套数据的位置和标签)。 谢谢,Zep 问题答案: 如果您正在寻找一种更通用的方法来从

  • 问题内容: 我正在尝试将JSON转换为CSV文件,可用于进一步分析。我的结构存在的问题是,当我转换JSON文件时,我有很多嵌套的字典/列表。 我尝试使用pandas ,但它只会使第一级扁平化。 任何想法如何讨好整个JSON文件,以便我可以为单个(在本例中为虚拟机)条目创建到CSV文件的单行输入?我已经尝试过这里发布的几种解决方案,但是我的结果始终只是将第一级展平。 这是示例JSON(在这种情况下,

  • 问题内容: 我从应该是两列宽的对象生成一个表(使用vue.js)。每个列都来自对象的键和值。这等效于以下实际HTML: 我使用CSS网格将其格式化为2x2网格,我希望这是 这样做的代码: 结果不是我期望的结果:两个最深的区域的行为就像它们应该在显示器之外:它们彼此堆叠。 我希望他们继承网格行为:在进行时根据列模板进行对齐。 如何实现? 问题答案: 网格属性不适用于您的内容div,因为这些div不在