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

Javascript 将包含数组作为值的对象减少为单个数组,javascript,ecmascript-6,Javascript,Ecmascript 6,问题:根据条件将包含数组作为值的对象缩减为单个数组。 详细信息:我有一个包含数组作为值的对象 { 514:["564"], 812:["514"], 1006:["921","812"], 1012: ["1002"], 1024:["6994","7992"], 6923:["1024","1006&q

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

{
  514:["564"],
  812:["514"],
  1006:["921","812"],
  1012: ["1002"],
  1024:["6994","7992"],
  6923:["1024","1006"],
  6994:["1012","7182"],
  7992:["5921"],
}
我想写一个javascript函数,它可以根据传递给函数的键将这个对象简化为数组。结果数组应该有我们传递给函数的id和它在object中的值,以及与这些值对应的任何其他值,直到我们找不到键为止。 例如:若我通过了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]| |[])。平面图(getNodes)],
节点={514:[“564”]、812:[“514”]、1006:[“921”、“812”]、1012:[“1002”]、1024:[“6994”、“7992”]、6923:[“1024”、“1006”]、6994:[“1012”、“7182”]、7992:[“5921”],
node=“6994”,
结果=getNodes(节点);

控制台日志(结果)请添加您的尝试。嗨,我不明白“1002”在那里有什么关系?D@Halil它是可以在键
1012
中找到的值,这是查看
6994
时找到的值之一。基本上,每次你有一个值,你检查它是否也是一个键,然后取相应的值,重复递归是不可取的,因为这个对象可能相当大,并且浏览器堆栈内存不足是不可取的。我会接受你的答案,因为它非常简洁,并且使用es6函数。如果可以,请分享一些有关此功能的性能见解。我有点担心递归的使用。在我看来,使用fifo队列对象的第二个答案要好得多。它没有递归,迭代次数等于结果中的元素数。O(n)