我有一项要求,我只需要检查对象数组中的重复描述。下面是对象示例。
traveler = [
{ description: 'Senior', Amount: 50},
{ description: 'Senior', Amount: 10},
{ description: 'Adult', Amount: 75},
{ description: 'Child', Amount: 35},
{ description: 'Infant', Amount: 25 },
{ description: 'Adult', Amount: 105},
];
在上面的数组行进器中,有一些对象具有重复的描述,因此如何只检查整个数组中是否存在重复的描述并显示一条消息。
我正在使用reduce方法,下面是代码。但是控件没有进入if循环
我在哪里出错了?
var res = traveler.reduce((acc, obj)=>{
var existItem = acc.find(item => item.description === obj.description);
if(existItem){
return this.toaster.pop('info', 'Insertion unsuccessful', 'Duplicate answer found')
}
});
答案 0 :(得分:2)
删除reduce
并仅使用filter
。
let existItem = traveler.filter(item => item.description === obj.description);
if (existItem.length > 1) {
return this.toaster.pop('info', 'Insertion unsuccessful', 'Duplicate answer found')
}
答案 1 :(得分:1)
您可以编写代码:
var traveler = [
{
description: "Senior",
Amount: 50
},
{
description: "Senior",
Amount: 10
},
{
description: "Adult",
Amount: 75
},
{
description: "Child",
Amount: 35
},
{
description: "Infant",
Amount: 25
},
{
description: "Adult",
Amount: 105
}
];
function hasDuplicateDesc(collection) {
var groups = collection.reduce((acc, cur) => {
acc[cur.description] = (acc[cur.description] || 0) + 1;
return acc;
}, {});
return Object.values(groups).some(num => num > 1);
}
if (hasDuplicateDesc(traveler)) {
return this.toaster.pop(
"info",
"Insertion unsuccessful",
"Duplicate answer found"
);
}
groups
是一个基本上创建对象的对象:
{
"Senior": 2,
"Adult": 2,
"Child": 1,
"Infant": 1
}
我们使用Object.values(groups)
来获取对象的值,并检查是否有一个比1
更好的数字。如果存在任何num > 1
,那么我们可以说存在重复的描述。
答案 2 :(得分:1)
该控件不会进入if块内,因为您没有将任何内容推入$("#field2").text("text here");
中(并且您没有在reduce的最后一个参数中对其进行初始化),reduce操作将不会执行此操作你。
此解决方案应该有效:
acc
此var res = traveler.reduce((acc, obj)=> {
var existItem = acc.find(item => item.description === obj.description);
if(existItem) {
return this.toaster.pop(
'info', 'Insertion unsuccessful', 'Duplicate answer found'
);
}
acc.push(obj);
return acc;
}, []);
将包含唯一值,并且res
会通知您重复项。
但是,您也可以通过将其放入if块内的重复列表中来保留重复项。
答案 3 :(得分:1)
尝试一下。
reduce(){
let res=[];
this.traveler.map(function(item){
var existItem = res.find(x=>x.description==item.description);
if(existItem)
console.log("item already exist");
else
res.push(item);
});
console.log(res);
}
答案 4 :(得分:0)
在这里,我试图找出阵列中重复的电子邮件。 我有 enteredEmails 数组,其中包含可能唯一或重复的电子邮件列表。
请找到以下示例。
this.enteredEmails.forEach(emailItr => {
matchedEmail = [];
matchedEmail = this.enteredEmails.filter((val) => val.emailId === emailItr.emailId);
if (matchedEmail.length > 1) {
return this.isDuplicate = true;
}
});
}