gpt4 book ai didi

javascript - 将包含数组作为值的对象减少为单个数组

转载 作者:行者123 更新时间:2023-12-03 07:20:15 25 4
gpt4 key购买 nike

问题:根据条件将包含数组作为值的对象减少为单个数组。详细信息:我有一个包含数组作为值的对象。

{
514:["564"],
812:["514"],
1006:["921","812"],
1012: ["1002"],
1024:["6994","7992"],
6923:["1024","1006"],
6994:["1012","7182"],
7992:["5921"],
}

我想编写一个 JavaScript 函数,它可以根据我传递给函数的键将该对象减少为数组。结果数组应该具有我们传递给函数的 id 和它在对象中的值,以及与这些值相对应的任何其他值,直到我们找不到键为止。例如:如果我传递 6994,那么我需要函数的结果,如下数组

["6994", "1012", "7182", "1002"]

我尝试了以下方法并使其发挥作用。想知道是否有更好更高效的解决方案:

function getChildIds({ treeMap, id }) {
let childIds = [id];
let parentIds = [id];
while(!!parentIds.length) {
let tempIds = [];
parentIds.forEach((parentId, index) => {
if(!!treeMap[parentId]) {
tempIds.push(...treeMap[parentId]);
childIds.push(...treeMap[parentId]);
}
});
parentIds = tempIds;
}
return childIds;
}

编辑:递归不是首选,因为该对象可能非常巨大,并且不希望耗尽浏览器堆栈内存。

最佳答案

您可以从给定节点获取嵌套节点。

类型:深度优先搜索:有序 (LNR)

const
getNodes = node => [node, ...(nodes[node] || []).flatMap(getNodes)],
nodes = { 514: ["564"], 812: ["514"], 1006: ["921", "812"], 1012: ["1002"], 1024: ["6994", "7992"], 6923: ["1024", "1006"], 6994: ["1012", "7182"], 7992: ["5921"] },
node = "6994",
result = getNodes(node);

console.log(result);

另一种方法使用堆栈,这可能比上面的递归 reduce 方法更快。

此方法的顺序不同,因为 tree traversal按级别顺序 ( breadth-first search )。

const
getNodes = node => {
const
stack = [node],
result = [];

while (stack.length) {
const
n = stack.shift();
result.push(n);
if (!nodes[n]) continue;
stack.push(...nodes[n]);
}
return result;
},
nodes = { 514: ["564"], 812: ["514"], 1006: ["921", "812"], 1012: ["1002"], 1024: ["6994", "7992"], 6923: ["1024", "1006"], 6994: ["1012", "7182"], 7992: ["5921"] },
node = "6994",
result = getNodes(node);

console.log(result);

关于javascript - 将包含数组作为值的对象减少为单个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62564037/

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