从具有特定属性的数组中删除除2个对象以外

时间:2014-10-15 15:05:48

标签: javascript arrays

我想基于属性从数组中删除对象 - 但是想要保存其中两个

var arr = [{"name": "John", "class": "warrior"},
 {"name": "Jane", "class": "mage"},
 {"name": "Doug", "class": "monk"},
 {"name": "Danna", "class": "warrior"}, ..]

var new_arr = arr.filter(function(el) { return el.class !== "warrior"; });

   // new_arr == [{"name": "Jane", "class": "mage"},
   //  {"name": "Doug", "class": "monk"}, ...]

如果我想删除或保留特定数量的这些对象,我该怎么做呢 - 比如删除class == "warrior"以外的所有对象

1 个答案:

答案 0 :(得分:2)

如果您不介意删除哪些内容,则可以跳过返回过滤器中前2位战士的false。您只需要一个变量来跟踪您匹配的战士数量,并在找到它时增加它们:

因此,对于John和Danna,matched将分别为1和2,因此保留在数组中:

var arr = [
    { "name": "John", "class": "warrior" },
    { "name": "Jane", "class": "mage" },
    { "name": "Doug", "class": "monk" },
    { "name": "Danna", "class": "warrior"},
    { "name": "Bob", "class": "warrior" },
    { "name": "Someone", "class": "mage" },
    { "name": "Bob2", "class": "warrior" },
    { "name": "Bob3", "class": "warrior" },
    { "name": "Bob4", "class": "warrior" }
];

var matched = 0;
var new_arr = arr.filter(function (el) {
    return (el.class !== "warrior" || ++matched <= 2);
});