簡體   English   中英

如果值匹配,如何從數組中刪除元素?

[英]How to remove element from array if values matched?

如果我在對象中找到值,我想從數組中刪除這些值。

完成這項任務的最佳解決方案是什么?

ctrl.js

  var selectedOwners = [];
            $scope.deleteOwner = function(dataItem){
                var workerKey;
                var fullName;
                angular.forEach(selectedOwners,function(val,index){
                  workerKey = val.workerKey;
                  fullName = val.fullName;
                })
                if(dataItem.workeyKey === workerKey || dataItem.fullName === fullName){ 
                  selectedOwners.splice(workerKey,fullName);
                }      
            }

數組和對象

Array  selectedOwners = [{"fullName":"Johnson, Rocio","workerKey":3506},{"fullName":"Johnson, John S.","workerKey":571},{"fullName":"Johnson, Camille A.","workerKey":1368}]

Object {
    "workerKey": 3506,
    "fullName": "Johnson, Rocio",
}

應該像這樣簡單:

var selectedOwners = [{
    "fullName": "Johnson, Rocio",
    "workerKey": 3506
}, {
    "fullName": "Johnson, John S.",
    "workerKey": 571
}, {
    "fullName": "Johnson, Camille A.",
    "workerKey": 1368
}];

var obj = {
    "workerKey": 3506,
    "fullName": "Johnson, Rocio",
};


for (var i = 0; i < selectedOwners.length; i++) {
    if (selectedOwners[i].workerKey === obj.workerKey) {
        selectedOwners.splice(i, 1);
        break;
    }
}

請記住,for循環假定workerKey在數組中是唯一的。 這就是為什么我們只需要在workerKey屬性上進行比較,並且在找到匹配項后也退出for循環的原因。

如果workerKey不是唯一的,這是循環:

for (var i = 0; i < selectedOwners.length; i++) {
    if (selectedOwners[i].workerKey === obj.workerKey &&
        selectedOwners[i].fullName === obj.fullName) {
        selectedOwners.splice(i, 1);

        // we need to decrement i by one because
        // we just removed an element from the array
        i--;
    }
}

使用indexOf獲取接頭的位置;

由於將對象作為dataItem傳遞,因此可以執行以下操作:

$scope.deleteOwner = function(dataItem){
    selectedOwners.splice(indexOf(dataItem), 1);
}

您可以使用lodash _.remove非常簡單

_.remove(selectedOwners , {
          "fullName": "Johnson, Rocio",
          "workerKey": 3506    //where condition
     });

您可以使用grep函數,如下所示:

$scope.deleteOwner = function(dataItem){
            selectedOwners = $.grep(selectedOwners, function(value) {
                return value.workerKey != dataItem.workerKey 
                     && value.fullName!= dataItem.fullName;
            });      
        }

我認為最好的主意是僅使用過濾器數組的方法。 沒有外部JS依賴性。

var selectedOwners = [{"fullName":"Johnson, Rocio","workerKey":3506},{"fullName":"Johnson, John S.","workerKey":571},{"fullName":"Johnson, Camille A.","workerKey":1368}]
var item = {
    "workerKey": 3506,
    "fullName": "Johnson, Rocio",
}

var resultArray = selectedOwners.filter(function(i){ 
   return !(i.fullname == item.fullname && i.workerKey == item.workerKey)
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM