在Javascript中从对象数组中删除所选项

时间:2016-07-12 10:57:15

标签: javascript arrays

我有一个对象数组,我必须从中删除所选对象并创建新的对象数组。

//Get all items from 'Product' dropdown
var allItems = [{ text: "India", value: "10" }, { text: "Canada", value: "12" }, { text: "US", value: "17" }, { text: "Austria", value: "18" }, { text: "South Africa", value: "14" }];

var itemsToRemove = ["17", "10"];

var newItems = [{ text: "Canada", value: "12" }, { text: "Austria", value: "18" }, { text: "South Africa", value: "14" }];

4 个答案:

答案 0 :(得分:1)

使用Array.prototype.filter

var newItems = allItems.filter(function(e) {
    // A.indexOf(x) == -1 if x is not found in A
    return itemsToRemove.indexOf(e.value) === -1;
});



var allItems = [
  { text: "India", value: "10" },
  { text: "Canada", value: "12" },
  { text: "US", value: "17" },
  { text: "Austria", value: "18" },
  { text: "South Africa", value: "14" }
];

var itemsToRemove = ["17", "10"];

var newItems = allItems.filter(function(e) {
    return itemsToRemove.indexOf(e.value) === -1;
});

console.log( newItems );




答案 1 :(得分:1)

您可以简单地使用splice来正确删除和索引javascript数组。

var allItems = [{
  text: "India",
  value: "10"
}, {
  text: "Canada",
  value: "12"
}, {
  text: "US",
  value: "17"
}, {
  text: "Austria",
  value: "18"
}, {
  text: "South Africa",
  value: "14"
}];

var itemsToRemove = ["17", "10"];

for (var i = 0; i < allItems.length; i++) {
  for (var j = 0; j < itemsToRemove.length; j++) {
    if (allItems[i].value == itemsToRemove[j])
      allItems.splice(i, 1);
  }

}

答案 2 :(得分:0)

试一试。

var allItems = [{
      text: "India",
      value: "10"
    }, {
      text: "Canada",
      value: "12"
    }, {
      text: "US",
      value: "17"
    }, {
      text: "Austria",
      value: "18"
    }, {
      text: "South Africa",
      value: "14"
    }];

    var itemsToRemove = ["17", "10"];

    for (var i = 0; i < allItems.length; i++) {
        if(itemsToRemove.indexOf(allItems[i].value) >= 0) {
            allItems.splice(i, 1);
        }
    }   

答案 3 :(得分:0)

感谢大家的回答,这就是我解决的问题。

var newItems = allItems.filter(function(item) {
    for (var i = 0; i < itemsToRemove.length; i++)
       if (itemsToRemove[i] == item.value) return false;
    return true;
});