在JavaScript中将数组转换为对象

时间:2017-01-29 10:09:24

标签: javascript node.js

我希望使用其中一个属性作为键将数组转换为对象。

例如:

var stations = [ { name: 'A Coruna', ds100: 'OECSC' }, ... ];

我想获得stationByDs100

{ 'OECSC': { name: 'A Coruna', ds100: 'OECSC' }, ... }

目前我这样做:

var stationByDs100 = {};
stations.forEach(station => stationByDs100[station.ds100] = station);

我正在寻找一种更好的方法来实现这一点 - 是否可以使用没有显式变量声明的单线程?

例如在Java 8中,这可以通过一行中的流和收集器完成,如:

Map<String, Station> stationByDs100 = stations.stream()
    .collect(toMap(Station::getDs100, identity()));

所以我想在JS中也许有类似的方式。

我正在使用Node.js,所以可以使用Node.js支持的最新JS / ES功能。

我已经浏览了十几个现有答案,但他们大多使用较旧的JS / ES版本,并提出更长的解决方案。

1 个答案:

答案 0 :(得分:9)

您可以将Object.assigncomputed property names一起使用。

var stations = [ { name: 'A Coruna', ds100: 'OECSC' }],
    object = stations.reduce((o, a) => Object.assign(o, { [a.ds100]: a }), {});

console.log(object);