在JavaScript中将数组转换为对象

在JavaScript中将数组转换为对象,javascript,node.js,Javascript,Node.js,我想使用其中一个属性作为键将数组转换为对象 例如: var stations = [ { name: 'A Coruna', ds100: 'OECSC' }, ... ]; 我想通过DS100获得站点: { 'OECSC': { name: 'A Coruna', ds100: 'OECSC' }, ... } 目前,我的做法如下: var stationByDs100 = {}; stations.forEach(station => stationByDs100[station.

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

例如:

var stations = [ { name: 'A Coruna', ds100: 'OECSC' }, ... ];
我想通过DS100获得
站点

{ '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()));
Map stationByDs100=stations.stream()
.collect(toMap(Station::getDs100,identity());
所以我想也许JS中也有类似的方法

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

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

您可以与一起使用

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

console.log(对象)使用,请参阅示例。@SpencerWieczorek一行程序,没有显式变量声明,根据所述标准,它更好。希望代码成为一行程序有什么特殊目的吗?通常,单行代码,尤其是涉及函数式数组方法的代码,比使用for/while循环和多行code@Zorgatone没有技术原因。在这种情况下,我不关心性能,我想了解更多关于JS中函数样式的知识,因为我在这方面很弱。好的,makes senseI更喜欢
Object.assign({},o,{[a.ds100]:a})
而不是
Object.assign(o,{[a.ds100]:a})
,以防止副作用。只是个人偏好。区别在于,我返回相同的对象,而非多项式建议始终使用新对象。@NinaScholz是的,我知道了,谢谢。我认为在这种情况下它并不是真的必要,因为累加器对象只用于归约。