javascript - 从数组中删除除 2 个具有特定属性的对象之外的所有对象

标签 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"的对象之外的所有对象

最佳答案

如果您不介意删除哪些战士,则可以跳过为过滤器中的前 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);
});

关于javascript - 从数组中删除除 2 个具有特定属性的对象之外的所有对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26385869/

相关文章:

c++ - 为什么 memset 在二维数组中正确填充 0 但无法在该数组中填充 1?

javascript - 邀请 friend 加入 Facebook 的替代方法

javascript - 当按下 TAB 按钮时,如何延迟移至下一个输入字段?

python - NumPy 。如何将二维数组按网格分割为多个数组?

arrays - 迭代数组内部的数组 Angular 4

java - 如何使用 JDBC insert 在表中插入数组

javascript - 错误未知提供商 : $scopeProvider <- $scope when using $injector to inject $scope into controller

javascript - 在添加选项后选择出现问题

javascript - 单击链接更改内容

javascript - 反转数组,循环中的 pop 方法未弹出完成