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

Javascript 使用其名称/值从数组中删除项,javascript,jquery,arrays,Javascript,Jquery,Arrays,我有以下数组 var countries = {}; countries.results = [ {id:'AF',name:'Afghanistan'}, {id:'AL',name:'Albania'}, {id:'DZ',name:'Algeria'} ]; 如何使用项目名称或id从此数组中删除项目 谢谢您可以使用delete操作符按属性名称删除属性 delete objectExpression.property 或者遍历对象,找到所需的值并将其删除: fo

我有以下数组

var countries = {};

countries.results = [
    {id:'AF',name:'Afghanistan'},
    {id:'AL',name:'Albania'},
    {id:'DZ',name:'Algeria'}
];
如何使用项目名称或id从此数组中删除项目


谢谢

您可以使用delete操作符按属性名称删除属性

delete objectExpression.property
或者遍历对象,找到所需的值并将其删除:

for(prop in Obj){
   if(Obj.hasOwnProperty(prop)){
      if(Obj[prop] === 'myValue'){
        delete Obj[prop];
      }
   }
}

为此创建了一个方便的函数

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');
试试这个:

var COUNTRY_ID = 'AL';

countries.results = 
  countries.results.filter(function(el){ return el.id != COUNTRY_ID; });

您可以按1个或多个属性删除:

//Delets an json object from array by given object properties. 
//Exp. someJasonCollection.deleteWhereMatches({ l: 1039, v: '3' }); -> 
//removes all items        with property l=1039 and property v='3'.
Array.prototype.deleteWhereMatches = function (matchObj) {
    var indexes = this.findIndexes(matchObj).sort(function (a, b) { return b > a; });
    var deleted = 0;
    for (var i = 0, count = indexes.length; i < count; i++) {
        this.splice(indexes[i], 1);
        deleted++;
    }
    return deleted;
}
//根据给定的对象属性从数组中删除json对象。
//Exp.someJasonCollection.deleteWhereMatches({l:1039,v'3'});->
//删除属性l=1039且属性v='3'的所有项。
Array.prototype.deleteWhereMatches=函数(matchObj){
var index=this.findIndexes(matchObj).sort(函数(a,b){返回b>a;});
var=0;
for(var i=0,count=index.length;i
这只需要javascript,而且比其他答案更具可读性。 (我假设当你写'value'时,你的意思是'id')

试试这个。(IE8+)

这对我很管用

countries.results= $.grep(countries.results, function (e) { 
      if(e.id!= currentID) {
       return true; 
      }
     });

你可以用来做

var国家={};
国家。结果=[
{id:'AF',name:'Afghanistan'},
{id:'AL',name:'albana'},
{id:'DZ',name:'alegaria'}
];
//按id删除元素
_.pullAllBy(countries.results,[{'id':'AL'}],'id');
//按名称删除元素
//_u.pullAllBy(countries.results,[{'name':'albana'}],'name');
控制台日志(国家)
。作为控制台包装器{
最大高度:100%!重要;
排名:0;
}

也许这也有帮助

for (var i = countries.length - 1; i--;) {
    if (countries[i]['id'] === 'AF' || countries[i]['name'] === 'Algeria'{
        countries.splice(i, 1);
    }
}

我想他想从数组中删除整个对象。而不是从对象中删除属性。+1:值得注意的是,IE不支持该属性9@JeremyHeiler:对于IE,可以从这里提供的代码中添加这样的函数:您引用了与我引用的相同的链接:-PNote:jQuery是使用此函数所必需的,这不会破坏索引,因为如果删除元素,索引会在执行过程中更改。@约翰斯特里克勒:您能在不使用jquery的情况下重写它吗。我不喜欢Libraries。根据文档,$。每个都不需要两个参数(不再?),谢谢。这不是投票率最高的答案,但对我来说效果最好。我正在解析从jquery AJAX成功处理程序返回的JSON数组和$。每个方法都意外地被“未定义”值绊倒。我仍然不知道为什么我会从一开始就得到“未定义”的值;但无论如何,这个代码片段对我来说绝对是最好的。谢谢@JimG.:很高兴我能帮上忙:-)@JimG您得到的未定义值是因为数组元素拼接后索引发生了变化,所以接受的答案实际上不起作用。你能把它改成这个吗]@GX:你能把接受的答案改成这个答案吗?请注意,如果你要删除的JSON对象的属性值是一个数字(比如:
{“key”:1}
),请确保你把传递给函数的参数转换成一个数字:
removeValue('key',+value)这让我抓狂了好几个小时。Delete应该只用于删除对象的属性,而不是删除数组中的内容-它只是用未定义的值替换该索引中的值!(不改变数组的长度等)。看见
//Define function
function removeJsonAttrs(json,attrs){
    return JSON.parse(JSON.stringify(json,function(k,v){
        return attrs.indexOf(k)!==-1 ? undefined: v;
}));}
//use object
var countries = {};
countries.results = [
    {id:'AF',name:'Afghanistan'},
    {id:'AL',name:'Albania'},
    {id:'DZ',name:'Algeria'}
];
countries = removeJsonAttrs(countries,["name"]);
//use array
var arr = [
    {id:'AF',name:'Afghanistan'},
    {id:'AL',name:'Albania'},
    {id:'DZ',name:'Algeria'}
];
arr = removeJsonAttrs(arr,["name"]);
countries.results= $.grep(countries.results, function (e) { 
      if(e.id!= currentID) {
       return true; 
      }
     });
for (var i = countries.length - 1; i--;) {
    if (countries[i]['id'] === 'AF' || countries[i]['name'] === 'Algeria'{
        countries.splice(i, 1);
    }
}