首页 > 解决方案 > Javascript数组排序具有键值条件的唯一对象

问题描述

我有一个数组

"datawithisNew": [
        {
            "exam_name": "MPSC",
            "isNew": false
        },
        
        {
            "exam_name": "MPSC",
            "isNew": true
        },
        {
            "exam_name": "UPSC",
            "isNew": false
        },
      
        {
            "exam_name": "RAILWAY",
            "isNew": false
        },
        {
            "exam_name": "RAILWAY",
            "isNew": false
        }]

我试图获得一个具有唯一性的结果,这样如果至少有 1 个键为真,则结果对象exam_name数组也具有唯一exam_name值,如果不是,则结果对象应该具有 的属性。预期结果——exam_nameisNewisNew truefalse

"datawithisNew": [
        {
            "exam_name": "MPSC",
            "isNew": true
        },

        {
            "exam_name": "UPSC",
            "isNew": false
        },
        {
            "exam_name": "RAILWAY",
            "isNew": false
        }]

我正在使用的代码是-

 var helper1 = {};
    var result2 = data12.reduce(function(r, o) {
    var key = o.exam_name ;
    
    if(!helper1[key]) {
      helper1[key] = Object.assign({}, o); // create a copy of o
      r.push(helper1[key]);
    } else {
      helper1[key].exam_name_rating += o.exam_name_rating;
    }
    return r;
  }, []);

但这只是返回唯一的对象,如果它至少发生一次,exam_name我也需要isNew密钥,因为它应该具有真实性,否则trueexam_nameisNew:trueisNew:false

标签: javascriptarrayssortingobjectjavascript-objects

解决方案


使用 JSArray.filter过滤掉重复项

const datawithisNew = [{
    "exam_name": "MPSC",
    "isNew": false
  },

  {
    "exam_name": "MPSC",
    "isNew": true
  },
  {
    "exam_name": "UPSC",
    "isNew": false
  },

  {
    "exam_name": "RAILWAY",
    "isNew": false
  },
  {
    "exam_name": "RAILWAY",
    "isNew": false
  }
];

const uniqueItems = datawithisNew.filter((exam, index, self) => {
  return self.findIndex(e => exam.exam_name === e.exam_name) === index
}).map(exam => {
  if (!exam.isNew && datawithisNew.find(e => e.exam_name === exam.exam_name && e.isNew)) {
    exam.isNew = true;
  }
  return exam;

});



console.log(uniqueItems);


推荐阅读