【发布时间】:2020-12-19 00:07:42
【问题描述】:
我有一个对象数组,如下所示:
const myArray = [
{
main_query: "query-1",
conditions: [
{
field: "branch_primary",
query: "1"
},
{
field: "web_domain",
query: "google.de"
}
]
},
{
main_query: "query-1",
conditions: [
{
field: "branch_primary",
query: "2"
},
{
field: "web_domain",
query: "google.de"
}
]
},
{
main_query: "query-1",
conditions: [
{
field: "branch_primary",
query: "3"
},
{
field: "web_domain",
query: "google.de"
}
]
}
];
请注意,我在每个父对象中都嵌套了具有 key: conditions 的对象数组。所有三个主要父对象都有键:main_query 和 conditions。
main_query 的值为 string,并且它们对于所有三个主要对象都是相同的。
条件又是对象数组,带有键:字段和查询
除了 field:"primary_branch" 的 query key value 分别为 1、2、3 之外,所有三个主要对象都具有相同的键值对/看起来相同。 p>
我正在使用下面的代码来找出唯一的对象数组。
const keys = ["main_query", "conditions"];
const filtered = myArray.filter(
((s) => (o) =>
((k) => !s.has(k) && s.add(k))(keys.map((i) => o[i]).join("|")))(
new Set()
)
);
const result = filtered.map((o) => Object.fromEntries(keys.map((k) => [k, o[k]])));
console.log(result);
不幸的是,我得到的结果如下:
{
main_query: "query-1",
conditions: [{
field: "branch_primary",
query: "1"
},
{
field: "web_domain",
query: "google.de"
}
]
}
但我希望所有三个对象都显示在控制台中,因为“primary_branch”字段具有不同的查询值。
预期输出应该是:
{
main_query: "query-1",
conditions: [{
field: "branch_primary",
query: "1"
},
{
field: "web_domain",
query: "google.de"
}
]
}, {
main_query: "query-1",
conditions: [{
field: "branch_primary",
query: "2"
},
{
field: "web_domain",
query: "google.de"
}
]
}, {
main_query: "query-1",
conditions: [{
field: "branch_primary",
query: "3"
},
{
field: "web_domain",
query: "google.de"
}
]
}
【问题讨论】:
-
对于其他对此代码感到困惑的人,它使用了一个名为currying的概念
标签: javascript arrays object duplicates