Javascript 在对象数组中选择唯一项

Javascript 在对象数组中选择唯一项,javascript,unique,Javascript,Unique,假设我有以下对象数组 [{a:1,b:2,c:4}, {a:3,b:4,c:7}, {a:7,b:10,c:10}, {a:1, b:2,c:4}] 如何选择此阵列中的唯一项。我需要比较这两个字段(仅a、b,不包括c),我看到的示例显示了一个仅采用单个字段的映射。您可以使用嵌套过滤器,并检查具有相同a和b的匹配元素数是否为1: constinput=[{a:1,b:2,c:4},{a:3,b:4,c:7},{a:7,b:10,c:10},{a:1,b:2,c:4}]; 常量输出=input.

假设我有以下对象数组

[{a:1,b:2,c:4}, {a:3,b:4,c:7}, {a:7,b:10,c:10}, {a:1, b:2,c:4}]

如何选择此阵列中的唯一项。我需要比较这两个字段(仅a、b,不包括c),我看到的示例显示了一个仅采用单个字段的映射。

您可以使用嵌套过滤器,并检查具有相同
a
b
的匹配元素数是否为1:

constinput=[{a:1,b:2,c:4},{a:3,b:4,c:7},{a:7,b:10,c:10},{a:1,b:2,c:4}];
常量输出=input.filter(
({a,b})=>input.filter(obj=>obj.a==a&&obj.b==b)。长度==1
);

控制台日志(输出)
您可以使用嵌套过滤器,并检查具有相同
a
b
的匹配元素数是否为1:

constinput=[{a:1,b:2,c:4},{a:3,b:4,c:7},{a:7,b:10,c:10},{a:1,b:2,c:4}];
常量输出=input.filter(
({a,b})=>input.filter(obj=>obj.a==a&&obj.b==b)。长度==1
);

控制台日志(输出)用于动态键创建一个函数,该函数以数组和表示键的数组字符串作为输入

创建另一个助手方法,用于比较两个对象的给定关键点

在对象数组上使用
filter()
,然后在当前索引不等于给定键的当前对象之前使用
every()
元素

让arr=[{a:1,b:2,c:4},{a:3,b:4,c:7},{a:7,b:10,c:10},{a:1,b:2,c:4}];
功能组件(obj1、obj2、键){
返回键.every(k=>obj1[k]==obj2[k]);
}
函数getUnique(arr,键){
返回arr.filter((x,i)=>arr.slice(0,i).every(a=>!comp(a,x,keys)))
}

log(getUnique(arr,['a','b'])
用于动态键创建一个函数,该函数以数组和表示键的数组字符串作为输入

创建另一个助手方法,用于比较两个对象的给定关键点

在对象数组上使用
filter()
,然后在当前索引不等于给定键的当前对象之前使用
every()
元素

让arr=[{a:1,b:2,c:4},{a:3,b:4,c:7},{a:7,b:10,c:10},{a:1,b:2,c:4}];
功能组件(obj1、obj2、键){
返回键.every(k=>obj1[k]==obj2[k]);
}
函数getUnique(arr,键){
返回arr.filter((x,i)=>arr.slice(0,i).every(a=>!comp(a,x,keys)))
}
log(getUnique(arr,['a','b'])
您可以将数组中的a作为累加器。将
a
b
属性组合用作键,以便删除重复项。然后使用获取输出

const input=[{a:1,b:2,c:4},{a:3,b:4,c:7},{a:7,b:10,c:10},{a:1,b:2,c:4}],
映射=输入.reduce((映射,o)=>map.set(o.a+“”+o.b,o),新映射),
输出=数组.from(mapped.values());
log(输出)
您可以使用一个数组作为累加器。将
a
b
属性组合用作键,以便删除重复项。然后使用获取输出

const input=[{a:1,b:2,c:4},{a:3,b:4,c:7},{a:7,b:10,c:10},{a:1,b:2,c:4}],
映射=输入.reduce((映射,o)=>map.set(o.a+“”+o.b,o),新映射),
输出=数组.from(mapped.values());

console.log(output)
那么你的预期输出是
{a:3,b:4,c:7},{a:7,b:10,c:10}
?你能告诉你的预期输出吗?可能是重复的,所以你的预期输出是
{a:3,b:4,c:7},{a:7,b:10,c:10}
?你能告诉你的预期输出吗?可能是重复的,谢谢你的回复,我想我忘了提到,我还需要一个单一的项目的重复项目,而不是完全忽略他们。上面给出的示例代码完全删除了重复项,我需要它的一个实例。@tmpdev它没有完全删除重复项。它为每个唯一的
a
b
保留一个项目。输出有3项。列表中只有一个带有
a:1、b:2
的项目output@tmpdev如果这回答了您的问题,请投票并将其标记为已接受。感谢您的所有答复,我想我忘了提及,我还需要重复项目的单个项目,不要完全忽略它们。上面给出的示例代码完全删除了重复项,我需要它的一个实例。@tmpdev它没有完全删除重复项。它为每个唯一的
a
b
保留一个项目。输出有3项。列表中只有一个带有
a:1、b:2
的项目output@tmpdev如果这回答了您的问题,请投票并将其标记为已接受。