获取打字稿“树”对象的元素

时间:2021-03-05 14:45:23

标签: javascript object

我有一个如下所示的对象:

enter image description here

它包含的对象也可以包含对象:它就像一棵树。

我怎样才能得到这个对象的不同分支的列表(作为列表)。

更清楚地说,对于前面的例子,我想要一个这样的列表:

[['Activity_06jvf7d','Activity_10kmald', 'Activity_1ynobrq'], ['Activity_02uytcw', 'Activity_0zjdtqq', etc.], etc.]

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

看起来您想要的结果的键的顺序由它们在图像上的显示方式定义。但是 Javascript 对象的键没有排序。这使得结果不确定。例如,

let tree = {
  alpha: {
    beta: {
      gamma: null
    },
    delta: {
      epsilon: null
    }
  }
}

可能导致

[['alpha', 'beta', 'gamma'], ['delta', 'epsilon']]

以及

[['alpha', 'delta', 'epsilon'], ['beta', 'gamma']]

两个都好吗?


既然任何可能的结果都可以,这里有一个解决方案:

function buildKeyLists(node: any)
{
  let result  = [];
  let current = [];

  function helper(node: any) {
    if (node === null) {
      result.push(current);
      current = [];
      return;
    }

    for (let key in node) {
      current.push(key);
      helper(node[key]);
    }
  }

  helper(node);

  return result;
}

还有一个例子:

buildKeyLists({
  Activity_06jvf7d: {
    Activity_10kmald: {
      Activity_1ynobrq: null
    },
    Activity_02uytcw: {
      Activity_0zjdtqq: {
        Activity_003ipe4: {
          Activity_1wl99tz: {
            Activity_0vgcvta: {
              Activity_0wz8mrj: null,
            },
            Activity_02oisqw: {
              Activity_0ibjg00: null
            }
          }
        },
        Activity_13l7ctn: {
          Activity_1cpcqnx: null
        }
      }
    }
  }
});

可能会回来

[["Activity_06jvf7d", "Activity_10kmald", "Activity_1ynobrq"], ["Activity_02uytcw", "Activity_0zjdtqq", "Activity_003ipe4", "Activity_1wl99tz", "Activity_0vgcvta", "Activity_0wz8mrj"], ["Activity_02oisqw", "Activity_0ibjg00"], ["Activity_13l7ctn", "Activity_1cpcqnx"]]
相关问题