簡體   English   中英

按對象鍵過濾對象數組

[英]Filter array of objects by object key

我在 Javascript 中有一個對象數組:

var List = [
            {
                employee:'Joe',
                type:'holiday',
            },
            {
                employee:'Jerry',
                type:'seminar',

            },
            {
                employee:'Joe',
                type:'shore leave',
            }
           ];

我想獲得兩個新的對象數組; 一個給關鍵員工“Joe”,另一個給關鍵員工“Jerry”。 對象應該保持相同的鍵/值對。

我一直在嘗試使用 underscore.js 獲得解決方案,但它變得太復雜了。 關於如何實現這一目標的任何想法?

var joe = List.filter(function(el){
 return el.employee === "Joe"
});

var jerry = List.filter(function(el){
 return el.employee === "Jerry"
});

這使用Array.prototype.filter並將在 IE9 及更高版本 + 所有最近的 Chrome/Firefox/Safari/Opera 版本中工作。

如果您事先不知道名稱,那么您可以創建一個地圖 var names = {};

for(var i =0; i<List.length; i++){
  var ename = List[i].employee;
  if(typeof names[ename] === "undefined"){
     names[ename] = List.filter(function(el){
     return el.employee === "ename"
    });
   }

}

作為旁注,Javascript 約定是僅將構造函數的變量的第一個字母大寫。 所以列表應該是列表。

var emps = {};  
_.each(List, function(item){
   emps[item.employee] = emps[item.employee] || [];
   emps[item.employee].push(item);
});

或使用groupBy

var emps = _.groupBy(List, function(item){
   return item.employee;
});

console.log(emps);

{
    "Jerry": [
        {
            "employee": "Jerry",
            "type": "seminar"
        }
    ],
    "Joe": [
        {
            "employee": "Joe",
            "type": "holiday"
        },
        {
            "employee": "Joe",
            "type": "shore leave"
        }
    ]
}

對不起 - 我沒有代表。 尚未發表評論,但我認為應該是

return el.employee === ename;  // No quotes around ename

否則@Ben 給出的答案是完美的——如果在項目中使用下划線是不可能的,它可以擴展為“groupby”函數。

為了完整性,還有下划線的_.filter版本,它與_.matcher iteratee速記一起使用 這本質上是 Ben McCormick答案的更短版本。

var joe = _.filter(List, {employee: 'Joe'});
var jerry = _.filter(List, {employee: 'Jerry'});

暫無
暫無

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

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