问题:根据条件将包含数组作为值的对象减少到单个数组。详细信息:我有一个包含数组作为值的对象。
{
514:["564"],
812:["514"],
1006:["921","812"],
1012: ["1002"],
1024:["6994","7992"],
6923:["1024","1006"],
6994:["1012","7182"],
7992:["5921"],
}
Run Code Online (Sandbox Code Playgroud)
我想编写一个 javascript 函数,该函数可以根据我传递给函数的键将此对象简化为数组。结果数组应该有我们传递给函数的 id 和它在对象中的值,以及与这些值对应的任何其他值,直到我们找不到键为止。例如:如果我通过 6994,那么我需要函数的结果如下数组
["6994", "1012", "7182", "1002"]
Run Code Online (Sandbox Code Playgroud)
我尝试并得到以下工作。想知道是否有更好更有效的解决方案:
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;
}
Run Code Online (Sandbox Code Playgroud)
编辑:递归不是首选,因为这个对象可能非常大并且浏览器堆栈内存不足是不可取的。