gpt4 book ai didi

javascript - "reduce"嵌套数组到带键对象的最快方法+按键查找的最快方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:49:18 25 4
gpt4 key购买 nike

我需要转换这种类型的嵌套数组,以便能够以最快的方式通过键 (id) 进行搜索:

[
{
"id":1,
"name":"example1",
"items":[
{
"id":1,
"name":"example1",
"example":123
},
{
"id":2,
"name":"example1",
"example":123
}
]
},
{
"id":2,
"name":"example1",
"items":[
{
"id":3,
"name":"example1",
"example":123
},
{
"id":4,
"name":"example1",
"example":123
}
]
}
]

实际上有更多的嵌套数组(大约 4 层)。

我目前的方法是对每个级别进行reduce,然后我可以使用例如list[1].items[1].name。对我来说,这看起来非常缓慢且效率低下。

我还在 stackoverflow 上找到了这里我可以创建查找表 id->index 但这看起来具有相同的复杂性并且占用更多内存。

有人有更好的主意来进行这种转换吗?我正在处理庞大的数据集,我开始觉得我需要找到更好的方法来处理数据。

我这样做是因为我需要通过 ID 快速搜索这个数据集。通过 findIndex 在数组中搜索很慢。转换需要像我上面描述的那样处理。

我需要找到总体复杂度最低的选项。

最佳答案

进行转型。这是一项值得付出代价的努力,因为您每次搜索都会从这项投资中受益。

这里是转换为基于Map 的查找表,用于检索关联的对象。它将以逗号分隔的 id 值字符串作为查找键:

function makeLookup(list, map=new Map, prefix="") {
for (let obj of list) {
map.set(prefix + obj.id, obj);
if (obj.items) makeLookup(obj.items, map, prefix + obj.id + ",");
}
return map;
}


let list = [{ "id":1, "name":"example1", "items":[
{"id":1, "name":"example2", "example":123},
{"id":2, "name":"example3", "example":123}
]}, { "id":2, "name":"example4", "items":[
{ "id":3, "name":"example5", "example":123 },
{ "id":4, "name":"example6", "example":123 }
]}
];

// One-shot transformation
let lookup = makeLookup(list);

// Demo of a loookup
console.log(lookup.get("1,2").name);
console.log(lookup.get("2,3").example);

关于javascript - "reduce"嵌套数组到带键对象的最快方法+按键查找的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58453522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com