Javascript 使用linq.js从嵌套数组中选择不同的对象

Javascript 使用linq.js从嵌套数组中选择不同的对象,javascript,linq.js,Javascript,Linq.js,假设我有以下数据 data: { variations: [{ steps: [ { Name: "Crawl", Status: "Complete" }, { Name: "Walk", Status: "InProgress" } ] },{ steps: [ { Name: "Crawl", Status: "Complete" },

假设我有以下数据

data: {
    variations: [{
        steps: [
            { Name: "Crawl", Status: "Complete" },
            { Name: "Walk", Status: "InProgress" }
        ]
    },{
        steps: [
            { Name: "Crawl", Status: "Complete" },
            { Name: "Walk", Status: "Complete" },
            { Name: "Run", Status: "NotStarted" }
        ]
    }]
}
如何使用linq.js获得这组数据?生成的数据集是跨越所有变体的唯一步骤。请注意,重复爬网不在结果中

[
    { Name: "Crawl", Status: "Complete" },
    { Name: "Walk", Status: "InProgress" },
    { Name: "Walk", Status: "Complete" },
    { Name: "Run", Status: "NotStarted" }
]

我尝试了许多选择和选择的组合,但我没有运气。

首先,您需要将其展平到一系列步骤。一旦你做到了这一点,你就必须挑选出这些步骤的不同副本。因为您处理的是对象,所以需要提供一个比较器。我只是将使其不同的属性组合成一个字符串

var query = Enumerable.From(result.data.variations)
  .SelectMany("$.steps")
  .Distinct("[$.Name, $.Status].join(',')")
  .ToArray();