Search code examples
javascriptjqueryjavascript-objects

How to remove complete unique value from array


How to remove complete record of same object in array please help me this, I am using below funtion but its only remove one value I want remove complete object of same object

var data = [{
    "QuestionOid": 1,
    "name": "hello",
    "label": "world"
}, {
   "QuestionOid": 2,
    "name": "abc",
    "label": "xyz"
}, {
   "QuestionOid": 1,
    "name": "hello",
    "label": "world"
}];

    function removeDumplicateValue(myArray) {
                    var newArray = [];

                    $.each(myArray, function (key, value) {
                        var exists = false;
                        $.each(newArray, function (k, val2) {
                            if (value.QuestionOid == val2.QuestionOid) { exists = true };
                        });
                        if (exists == false && value.QuestionOid != undefined) { newArray.push(value); }
                    });

                    return newArray;
                }

I want result like this

[{
   "QuestionOid": 2,
    "name": "abc",
    "label": "xyz"
}]

Solution

  • You can use reduce.

    var data = [{"QuestionOid": 1,"name": "hello","label": "world"}, {"QuestionOid": 2,"name": "abc","label": "xyz"}, {"QuestionOid": 1,"name": "hello","label": "world"}];
    
    
    let op = data.reduce((op,inp)=>{
      if(op[inp.QuestionOid]){
        op[inp.QuestionOid].count++
      } else {
        op[inp.QuestionOid] = {...inp,count:1}
      }
      return op
    },{})
    
    let final = Object.values(op).reduce((op,{count,...rest})=>{
      if(count === 1){
        op.push(rest)
      }
      return op
    },[])
    
    console.log(final)