我需要使用Angular.js检查json数组中是否存在重复键值。我在下面解释我的代码。
var result=[{
"email":'a@gmail.com',
"title":'hello',
"start":'yes'
},{
"email":'a@gmail.com',
"title":'hello',
"start":'yes'
},{
"email":'b@gmail.com',
"title":'ggggg',
"start":'No'
},{
"email":'g@gmail.com',
"title":'hel',
"start":'No'
},{
"email":'b@gmail.com',
"title":'ggggg',
"start":'No'
}];
if (result.length > 0) {
angular.forEach(result,function(obj2){
var data={'title':obj2.mname,'start':obj2.date};
evtArr.push(data);
})
}
此处我的要求是在将数据推送到evtArr
之前,如果一组值属于一封电子邮件(key- email
),则会使用i.e-a@gmail.com
检查重复值evtArr
然后其他人将删除。
答案 0 :(得分:0)
您可以使用array#reduce
并使用email
作为键和对象作为值创建对象。使用Object.values()
从对象中取出所有值。
var result=[{ "email":'a@gmail.com', "title":'hello', "start":'yes' },{ "email":'a@gmail.com', "title":'hello', "start":'yes' },{ "email":'b@gmail.com', "title":'ggggg', "start":'No' },{ "email":'g@gmail.com', "title":'hel', "start":'No' },{ "email":'b@gmail.com',"title":'ggggg', "start":'No' }],
output = Object.values(result.reduce((r,o) => {
r[o.email] = Object.assign({},o);
return r;
},{}));
console.log(output);

答案 1 :(得分:0)
以下是一个简单易懂的解决方案。
首先,如果具有相同电子邮件的结果尚未推送到该数组中,则仅将结果推送到resultFinal
数组。
let resultFinal = [];
result.forEach((resI) => {
if (resultFinal.findIndex(resF => resF.email === resI.email) === -1) {
resultFinal.push(result);
}
});
获得resultFinal
数组后,为每个元素运行一个地图并返回仅包含title
和start
的对象。
resultFinal = resultFinal.map((resF) => {
return {title: resultf.title, start: resultf.start};
});
希望这会对你有所帮助。
答案 2 :(得分:0)
轻松尝试此Code.understand
var result = [{
"email": 'a@gmail.com',
"title": 'hello',
"start": 'yes'
}, {
"email": 'a@gmail.com',
"title": 'hello',
"start": 'yes'
}, {
"email": 'b@gmail.com',
"title": 'ggggg',
"start": 'No'
}, {
"email": 'g@gmail.com',
"title": 'hel',
"start": 'No'
}, {
"email": 'b@gmail.com',
"title": 'ggggg',
"start": 'No'
}];
if (result.length > 0) {
var ArrayPush = [];
for (i = 0; i < result.length; i++) {
var obj = {}
obj.email = result[i].email;
obj.title = result[i].title;
obj.start = result[i].start;
var Getdistinctdate=ArrayPush.filter(function(element){
return element.email==result[i].email;
});
if(Getdistinctdate.length==0){
ArrayPush.push(obj);
}
}
}