【发布时间】:2021-08-23 15:10:35
【问题描述】:
我有一个如下所示的对象数组:
const arr = [
{name: "1", category: "TV", region: "US"}
,{name: "2", category: "TV", region: "SE"}
,{name: "3", category: "Movies", region: "US"}
,{name: "4", category: "Music", region: "US"}
,{name: "5", category: "Movies", region: "UK"}
,{name: "6", category: "Movies", region: "UK"}
,{name: "6", category: "Cartoon", region: "SP"}
];
请注意,没有字段是唯一的。如您所见,可以有多个名称:6。然而,对象本身是独一无二的,因为没有一个对象具有与另一个对象完全相同的属性。
我想应用 OR 标准。所以我想要所有至少与其中一个属性匹配的对象。 例如,使用这个带有条件的 json 数组:
const filtrering = [
{ name: 'category', values: [ 'TV', 'Movies' ] }
,{ name: 'region', values: [ 'UK' ] }
];
我希望看到一个包含除数字 4 之外的所有值的数组(其中 category=Music 和 region=US,它们不在条件数组中)。 使用这个三重映射,我得到了正确的对象,但有重复:
filtrering.map(filter => {
arr.map(ind => {
filter.values.map(vl => {
if(ind[filter.name] === vl){
console.log("index found:",ind);
}
});
});
});
所以控制台正在记录以下内容:
index found: { name: '1', category: 'TV', region: 'US' }
index found: { name: '2', category: 'TV', region: 'SE' }
index found: { name: '3', category: 'Movies', region: 'US' }
index found: { name: '5', category: 'Movies', region: 'UK' }
index found: { name: '6', category: 'Movies', region: 'UK' }
index found: { name: '5', category: 'Movies', region: 'UK' }
index found: { name: '6', category: 'Movies', region: 'UK' }
也许我可以删除重复项。但在我看来,这似乎不是解决这个问题的最佳算法。
【问题讨论】:
-
你没有从任何
map调用中返回任何东西,所以它们几乎没用。如果您想过滤数组,请使用filter。
标签: javascript