如何将丑陋的forEach转换为更好的地图?
convertedClientsToArray() {
let clientArray = [];
this.selectClients.forEach(client => {
clientArray[client.id] = client.name;
})
return clientArray
}
我已经尝试但是它并没有将id作为密钥返回。
感谢您的帮助
答案 0 :(得分:2)
据推测,您需要一个对象,而不是一个数组,其中包含映射到名称的ID。
尝试使用reduce
,传入一个空对象作为初始化程序。
convertedClientsToArray () {
return this.selectClients.reduce((map, client) =>
((map[client.id] = client.name), map), {});
}
答案 1 :(得分:1)
clientArray
必须是对象({}
)而不是数组([]
)。然后你可以像这样使用reduce
:
convertedClientsToArray() {
return this.selectClients.reduce((result, client) => {
result[client.id] = client.name;
return result;
}, {}); // initial value of result is {}
}
答案 2 :(得分:0)
使用Array map()方法:
var client = [
{
"id": 1,
"name": "alpha"
},
{
"id": 2,
"name": "beta"
},
{
"id": 3,
"name": "gamma"
},
{
"id": 4,
"name": "xyz"
}
];
var res = client.map(function(item) {
var obj = {};
obj[item.id] = item.name;
return obj;
});
console.log(res);
将ES6 arrow function expression 与地图:
一起使用
var client = [
{
"id": 1,
"name": "alpha"
},
{
"id": 2,
"name": "beta"
},
{
"id": 3,
"name": "gamma"
},
{
"id": 4,
"name": "xyz"
}
];
var obj = {};
client.map(item => obj[item.id] = item.name);
console.log(obj);