【问题标题】:Javascript map an array to a new one with defined keysJavascript 将数组映射到具有定义键的新数组
【发布时间】:2017-03-21 15:55:52
【问题描述】:
我需要的是转换这个数组
[
0: {id: 1},
1: {id: 2}
]
到
[
1: {id: 1},
2: {id: 2}
]
我想只是切换键,我尝试使用 .map 但我能更改的只是值而不是键
【问题讨论】:
标签:
javascript
ecmascript-6
【解决方案1】:
我认为您可以使用reduce 轻松解决它
它从一个空数组开始,在每次迭代期间,在 items id 字段的索引处添加 1 个项目。
这将为您提供一个长度可能不是您预期的数组,因此我建议您更深入地了解您的要求。
var arr = [
{id: 1},
{id: 2}
];
var result = arr.reduce( (container, item) => {
container[item.id] = item;
return container;
}, [] );
console.log( result[1] );
console.log( result[2] );
console.log( result );
您总是可以使用几乎相同的语法将其设为具有正确键的对象
var arr = [
{id: 1},
{id: 2}
];
var result = arr.reduce( (container, item) => {
container[item.id] = item;
return container;
}, {} );
console.log( result[1] );
console.log( result[2] );
console.log( result );
需要注意的重要一点是,对于数组,您在位置 0 处有一个未定义的值,而对象版本没有它。使用对象版本而不是数组更有意义。正如 cmets 中所提到的,在您的阵列中存在间隙并不是一个好主意。