开发者

Javascript: How to remove an array item(JSON object) based on the item property value?

开发者 https://www.devze.com 2022-12-13 13:22 出处:网络
like this: var arr = [ { name: \"robin\", age: 19 }, { name: \"tom\", age: 29 }, 开发者_JS百科 { name: \"test\", age: 39 }

like this:

var arr = [  
            { name: "robin", age: 19 },   
            { name: "tom", age: 29 },  
           开发者_JS百科 { name: "test", age: 39 } 
          ];  

I want to remove array item like this(an array prototype method):

arr.remove("name", "test");  // remove by name  
arr.remove("age", "29");  // remove by age

currently, I do it by this method(use jQuery):

Array.prototype.remove = function(name, value) {  
    array = this;  
    var rest = $.grep(this, function(item){    
        return (item[name] != value);    
    });  

    array.length = rest.length;  
    $.each(rest, function(n, obj) {  
        array[n] = obj;  
    });  
};  

but I think the solution has some performance issue,so any good idea?


I would hope jQuery's oddly-named grep would be reasonably performant and use the built-in filter method of Array objects where available, so that bit is likely to be fine. The bit I'd change is the bit to copy the filtered items back into the original array:

Array.prototype.remove = function(name, value) {  
    var rest = $.grep(this, function(item){    
        return (item[name] !== value); // <- You may or may not want strict equality
    });

    this.length = 0;
    this.push.apply(this, rest);
    return this; // <- This seems like a jQuery-ish thing to do but is optional
};
0

精彩评论

暂无评论...
验证码 换一张
取 消