使用索引数组访问和修改Javascript中任意深的嵌套数组

问题描述 投票:0回答:2

我有一组对象。每个对象还可以包含对象数组,依此类推直至任意深度。

var myArray = [
    { 
        id:'foo', 
        items:[]
    },
    {
        id:'bar', 
        items:[
            {
                id:'blah'
                items:[...etc...]
            }
        ]
    }
]

我想使用索引数组读取,添加和删除嵌套数组中的对象。

因此将使用此索引数组作为参数调用从myArray[1][3][2]中删除值myArray的函数:[1, 3, 2]

我发现您可以使用reduce()返回这样的值:

indexes.reduce((acc, cur) => Array.isArray(acc) ? acc[cur] : acc.items[cur], myArray)

但无法确定如何使用相同的想法删除或添加值。非常感谢您的帮助。

javascript arrays multidimensional-array
2个回答
0
投票

最简单的方法是只使用索引而不使用最后一个索引,以便根据需要将其用于任何操作。

对于删除,您需要此索引将数组splice以及更新。

在这种情况下,您可以返回父对象,并使用具有items作为给定数组属性的对象作为减少的起始值。

这将允许访问父对象并将items用于任何进一步的操作。

lastIndex = indices.pop();
parent = indices.reduce((r, index) => r.items[index], { items: myArray });

// further use
parent.items.splice(lastIndex, 1); // delete

0
投票

您可以创建一个函数,该函数采用与splice函数相似的参数。传递嵌套数组,splice路径,要删除的项目总数,并使用indices收集最后要添加的所有新项目。

如果只想插入,则传递rest parameters。如果您只想删除,请跳过最后一个参数。

deleteCount = 0
© www.soinside.com 2019 - 2024. All rights reserved.