2

私はJavascriptでオブジェクトの配列を持っています:

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

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

オブジェクトの 2 つの新しい配列を取得したいと考えています。1 つは主要な従業員 "Joe" 用で、もう 1 つは主要な従業員 "Jerry" 用です。オブジェクトは同じキー/値のペアを保持する必要があります。

underscore.js を使用して解決策を見つけようとしていますが、複雑になりすぎています。これをどのように達成できるかについてのアイデアはありますか?

4

4 に答える 4

5
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 の規則では、コンストラクターの変数の最初の文字のみを大文字にします。したがって、List はおそらく list である必要があります。

于 2013-03-07T15:15:08.373 に答える
3
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"
        }
    ]
}
于 2013-03-07T15:17:45.343 に答える