【发布时间】:2018-08-26 01:55:45
【问题描述】:
我目前正在尝试将数组转换为以数组索引作为创建对象的属性的对象。
示例数组:['a','b','c']
预期对象结果:{'1':'a','2':'b','3':'c'}
我的代码在下面,当我使用 map 方法时它可以工作,但是当我使用 reduce 方法时,它会出现奇怪的方式:
let sampleData = ['a','b','c'];
let convertArrToObjWithIndexProp = (arr) => {
/*let res = {};
arr.map((v,k)=> {
res[k+1]=v;
})
return res;*/
//--> this outputs {'1':'a','2':'b','3':'c'}
return arr.reduce((iv,cv,i)=>{
return Object.assign(iv,iv[i+1]=cv);
},{});
//--> this outputs instead {'0':'c','1':'a','2':'b','3':'c'}
}
console.log(convertArrToObjWithIndexProp(sampleData));
有人能解释一下为什么会这样吗?
使用reduce也比使用map好?
【问题讨论】:
-
Object.assign(iv, {[i+1]: cv});应该可以工作。我不知道你的代码目前在做什么,但它看起来很奇怪 -
stackoverflow.com/questions/49469699/array-to-object-reduce 的可能重复 如果您有一个对象数组并且需要复制每个对象,则正确的
Object.assign语法应为:return arr.reduce((iv, cv, i) => Object.assign({}, iv, {[i]: cv}), {});
标签: javascript arrays