У меня есть следующий массив объектов.Удалить элемент из массива объектов javascript
[{"rId":24,"gId":40,"sId":20,"disabled":false},
{"rId":24,"gId":40,"sId":19,"disabled":false},
{"rId":24,"gId":40,"sId":50,"disabled":false},
{"rId":24,"gId":40,"sId":20,"disabled":true},
{"rId":24,"gId":40,"sId":19,"disabled":true},
{"rId":24,"gId":40,"sId":50,"disabled":true},
{"rId":24,"gId":39,"sId":18,"disabled":false}]
В каких-то записях есть антитеза ex. 1-й элемент и 4-й, который имеет одинаковый флаг rId, gId и sId, но отключен, противоположный. Я хочу исключить все такие записи.
Мой ожидаемый массив {"rId":24,"gId":39,"sId":18,"disabled":false}
(удалить все записи антитезы)
Я попытался следующий код, но он дает мне неправильный вывод.
arrOfObj=[{"rId":24,"gId":40,"sId":20,"disabled":false},
{"rId":24,"gId":40,"sId":19,"disabled":false},
{"rId":24,"gId":40,"sId":50,"disabled":false},
{"rId":24,"gId":40,"sId":20,"disabled":true},
{"rId":24,"gId":40,"sId":19,"disabled":true},
{"rId":24,"gId":40,"sId":50,"disabled":true},
{"rId":24,"gId":39,"sId":18,"disabled":false}]
$.each(arrOfObj,function (index1,firstObj) {
$.each(arrOfObj,function (index2,secondObj) {
if(index1>= index2){
return true;
}
var areObjAntithesis=firstObj.rId===secondObj.rId && firstObj.gId===secondObj.gId
&& firstObj.sId===secondObj.sId && firstObj.disabled!==secondObj.disabled;
if(areObjAntithesis){
arrOfObj.splice(index1,1);
arrOfObj.splice(index2,1)
return false;
}
})
})
Есть ли элегантный способ достижения ожидаемого результата?