我希望使用其中一个属性作为键将数组转换为对象。
例如:
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版本,并提出更长的解决方案。
答案 0 :(得分:9)
您可以将Object.assign
与computed property names一起使用。
var stations = [ { name: 'A Coruna', ds100: 'OECSC' }],
object = stations.reduce((o, a) => Object.assign(o, { [a.ds100]: a }), {});
console.log(object);