javascript - 从对象数组javascript中删除元素

标签 javascript jquery angularjs arrays

我有以下对象数组。

[{"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}]

其中一些记录是对立的。第一个元素和第四个元素具有相同的 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;
        }
    })
})

有什么优雅的方法可以达到预期的输出吗?

最佳答案

您可以使用 map()filter()

var data = [{"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}]
 
var ar = data.map(function(e) {
  return e.rId + '|' + e.gId + '|' + e.sId;
});
 
var result = data.filter(function(e) {
  var key = e.rId + '|' + e.gId + '|' + e.sId;
  return ar.indexOf(key) == ar.lastIndexOf(key);
});

console.log(result)

关于javascript - 从对象数组javascript中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40485216/

相关文章:

javascript - AngularJS 按名称从变量扩展的属性过滤

javascript - 拉斐尔简单时钟 2.1.4

javascript - 使用 Javascript 将具有相同日期的数组中的对象合并到新的对象数组中

javascript - 使用 jQuery 在页眉和页脚之间滚动时如何使侧边栏变粘(不滚动它们)?

javascript - addClass/removeClass 单击以选择另一个 div 的数据属性

javascript - MongoDB 脚本和 CSV 文件 : can I use require. js 加载 jquery.csv?

javascript - Angularjs:如何使用 $scope 中的数据填充第二个位置的二维数组

javascript - 我怎么知道 $http 响应是否来自缓存 - Angular

javascript - 如何将 jQuery 进度条添加到幻灯片画廊?

javascript - 导入的国家/地区列表为空