簡體   English   中英

從具有特定屬性的數組中刪除除2個對象之外的所有對象

[英]Remove all but 2 objects from array with specific property

我想從一個基於屬性的數組中刪除對象,但想保存其中兩個

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"

如果您不介意刪除哪些過濾器,則可以跳過過濾器中前兩個戰士返回false的操作。 您只需要一個變量來跟蹤您已經匹配了多少個戰士,並在找到一個戰士時增加它:

因此,對於John和丹納, 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);
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM