使用其名称/值从数组中删除项目

G-M*_*Man 26 javascript arrays jquery

我有以下数组

var countries = {};

countries.results = [
    {id:'AF',name:'Afghanistan'},
    {id:'AL',name:'Albania'},
    {id:'DZ',name:'Algeria'}
];
Run Code Online (Sandbox Code Playgroud)

如何使用其名称或ID从此数组中删除项?

谢谢

Joh*_*ler 52

为此创造了一个方便的功能..

function findAndRemove(array, property, value) {
  array.forEach(function(result, index) {
    if(result[property] === value) {
      //Remove from array
      array.splice(index, 1);
    }    
  });
}

//Checks countries.result for an object with a property of 'id' whose value is 'AF'
//Then removes it ;p
findAndRemove(countries.results, 'id', 'AF');
Run Code Online (Sandbox Code Playgroud)

  • 注意:使用此函数需要jQuery (10认同)
  • 这是否会破坏索引,因为如果删除了元素,索引会在执行期间更改. (7认同)
  • 这应该适用于json对象吗? (2认同)

Roc*_*mat 35

Array.prototype.removeValue = function(name, value){
   var array = $.map(this, function(v,i){
      return v[name] === value ? null : v;
   });
   this.length = 0; //clear original array
   this.push.apply(this, array); //push all elements except the one we want to delete
}

countries.results.removeValue('name', 'Albania');
Run Code Online (Sandbox Code Playgroud)

  • +1:这不是最高的投票答案,但它对我来说效果最好.我正在解析一个JSON数组,我从jquery AJAX成功处理程序返回,并且$ .each方法意外地跳过'undefined'值.我仍然不确定为什么我要回到'未定义'的值开始; 但无论如何,这段代码片段对我来说绝对是最好的.谢谢! (3认同)
  • 只是抬头,如果您要删除的JSON对象的属性值是一个数字(如:`{"key":1}`),请确保将您传入函数的参数转换为一个数字:`removeValue('key',+ value);`这让我疯了几个小时. (2认同)

c-s*_*ile 20

试试这个:

var COUNTRY_ID = 'AL';

countries.results = 
  countries.results.filter(function(el){ return el.id != COUNTRY_ID; });
Run Code Online (Sandbox Code Playgroud)

  • +1:值得注意的是[IE不支持<9](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filter#Browser_compatibility) (5认同)
  • 您引用了我引用的相同链接:-P (4认同)