我在Javascript中有一组对象:
var List = [
{
employee:'Joe',
type:'holiday',
},
{
employee:'Jerry',
type:'seminar',
},
{
employee:'Joe',
type:'shore leave',
}
];
我想获得两个新的对象数组;一个用于关键员工“Joe”,另一个用于关键员工“Jerry”。对象应保持相同的键/值对。
我一直在尝试使用underscore.js来获得解决方案,但它变得太复杂了。关于如何实现这一点的任何想法?
提前致谢
答案 0 :(得分:3)
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约定只是为构造函数大写变量的第一个字母。所以列表应该是列表。
答案 1 :(得分:2)
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"
}
]
}
答案 2 :(得分:0)
抱歉 - 我没有代表。发表评论,但我相信它应该是
return el.employee === ename; // No quotes around ename
否则@Ben给出的答案是完美的 - 如果在项目中使用下划线是不可能的,它可以扩展为'groupby'函数。
答案 3 :(得分:0)