我有一个对象数组(Employee {role: string, members: string []}
)
array = [{
role: 'doctor',
fullName: 'x'
}, {
role: 'nurse',
fullName: 'y'
}, {
role: 'doctor',
fullName: 'z'
}]
我希望按类型脚本
中的新数组(结果)中的角色对对象进行分组result = [{
role: 'doctor',
members: ['x', 'z']
} {
role: 'nurse',
members: ['y']
}
}
我的代码:
result = array.map(function(pemp: any) {
if (!array.some(function(el: any) {
return el.role === pemp.role;
})) {
return new Employee(pemp.role, pemp.fullName);
} else {
var pos = this.result.map(function(e: any) {
return e.role;
}).indexOf(pemp.role);
this.result[pos].members.push(pemp.fullName)
}
});
答案 0 :(得分:0)
您可以尝试这样的事情:
var data = [{
role: 'doctor',
fullName: 'x'
}, {
role: 'nurse',
fullName: 'y'
}, {
role: 'doctor',
fullName: 'z'
}];
var obj = {};
data.forEach(function(item){
if(!obj[item.role]) obj[item.role] = [];
obj[item.role].push(item.fullName);
});
var result = Object.keys(obj).map(function(k){
return {role:k, members: obj[k]}
});
document.getElementById("result").innerHTML = JSON.stringify(result,0,4)
<pre id="result"></pre>
答案 1 :(得分:0)
虽然这不是打字稿中的解决方案,但您可以使用带有Array#forEach
的单个循环和一个临时对象作为分组角色的结果数组的引用。
var array = [{ role: 'doctor', fullName: 'x' }, { role: 'nurse', fullName: 'y' }, { role: 'doctor', fullName: 'z' }],
result = [];
array.forEach(function (a) {
if (!this[a.role]) {
this[a.role] = { role: a.role, members: [] };
result.push(this[a.role]);
}
this[a.role].members.push(a.fullName);
}, Object.create(null));
console.log(result);