我有一组对象。每个对象还可以包含对象数组,依此类推直至任意深度。
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)
但无法确定如何使用相同的想法删除或添加值。非常感谢您的帮助。
最简单的方法是只使用索引而不使用最后一个索引,以便根据需要将其用于任何操作。
对于删除,您需要此索引将数组splice
以及更新。
在这种情况下,您可以返回父对象,并使用具有items
作为给定数组属性的对象作为减少的起始值。
这将允许访问父对象并将items
用于任何进一步的操作。
lastIndex = indices.pop();
parent = indices.reduce((r, index) => r.items[index], { items: myArray });
// further use
parent.items.splice(lastIndex, 1); // delete
您可以创建一个函数,该函数采用与splice
函数相似的参数。传递嵌套数组,splice
路径,要删除的项目总数,并使用indices
收集最后要添加的所有新项目。
如果只想插入,则传递rest parameters。如果您只想删除,请跳过最后一个参数。
deleteCount = 0