我想基于属性从数组中删除对象 - 但是想要保存其中两个
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"
以外的所有对象
答案 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);
});