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();