使用Angular.js检查json数组中存在的重复键值

时间:2018-02-01 05:33:58

标签: javascript angularjs json

我需要使用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然后其他人将删除。

3 个答案:

答案 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数组后,为每个元素运行一个地图并返回仅包含titlestart的对象。

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);
                    }

                }

            }