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

IT技术 javascript jquery arrays
2021-03-01 23:10:39

我有以下数组

var countries = {};

countries.results = [
    {id:'AF',name:'Afghanistan'},
    {id:'AL',name:'Albania'},
    {id:'DZ',name:'Algeria'}
];

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

谢谢

6个回答

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

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');
根据文档api.jquery.com/each, $.each 不需要两个参数(还有吗?)。
2021-04-20 23:10:39
这是否不会破坏索引,因为如果删除元素,索引会在执行期间更改。
2021-04-22 23:10:39
@JohnSrickler:你能在没有 jquery 的情况下重写这个吗?我不喜欢图书馆。
2021-05-06 23:10:39
谢谢。奇迹般有效 :-)
2021-05-14 23:10:39
注意:使用这个功能需要jQuery
2021-05-19 23:10:39
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');
@JimG 您得到的未定义值是因为在拼接出数组元素后索引发生了变化,因此接受的答案实际上不起作用。能不能改成这个】
2021-04-24 23:10:39
@GX。:您能否更改此答案的已接受答案?
2021-04-25 23:10:39
+1:这不是投票最高的答案,但对我来说效果最好。我正在解析我从 jquery AJAX 成功处理程序返回的 JSON 数组,并且 $.each 方法意外地绊倒了“未定义”值。我仍然不确定为什么我一开始要取回“未定义”的值;但无论如何,这段代码片段对我来说绝对是最好的。谢谢!
2021-05-03 23:10:39
请注意,如果您要删除的 JSON 对象的属性值是一个数字(例如:){"key": 1},请确保您将传递给函数的参数转换为一个数字:removeValue('key', +value);这让我发疯了几个小时。
2021-05-07 23:10:39
@JimG。:很高兴我能帮上忙:-)
2021-05-11 23:10:39

试试这个:

var COUNTRY_ID = 'AL';

countries.results = 
  countries.results.filter(function(el){ return el.id != COUNTRY_ID; });
您引用了我引用的相同链接:-P
2021-05-08 23:10:39
+1:值得注意的是它在 IE < 9 中不受支持
2021-05-13 23:10:39
@Jeremy Heiler:对于 IE,可以从此处提供的代码添加此类功能:developer.mozilla.org/en/JavaScript/Reference/Global_Objects/...
2021-05-17 23:10:39

试试这个。(IE8+)

//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"]);

您可以删除 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;
}