如何将forEach转换为地图

时间:2017-04-20 07:41:45

标签: javascript

如何将丑陋的forEach转换为更好的地图?

convertedClientsToArray() {
        let clientArray = [];
        this.selectClients.forEach(client => {
            clientArray[client.id] = client.name;
        })
        return clientArray
}

我已经尝试但是它并没有将id作为密钥返回。

感谢您的帮助

3 个答案:

答案 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);