我目前正在尝试将数组转换为对象,并以数组索引作为创建对象的属性。
示例数组:['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更好吗?
答案 0 :(得分:3)
问题在于该表达式的结果:iv[i+1]=cv
是cv
,然后您将Object.assign
传递到累加器。您可以通过简单的分配使其更简单:
let sampleData = ['a','b','c'];
let convertArrToObjWithIndexProp = (arr) =>
arr.reduce((iv,cv,i) => (iv[i+1] = cv, iv),{});
console.log(convertArrToObjWithIndexProp(sampleData));
答案 1 :(得分:1)
请勿使用Object.assign
。只需更新您的对象并返回即可。
let sampleData = ['a','b','c'];
let convertArrToObjWithIndexProp = (arr) => {
return arr.reduce((iv,cv,i)=>{
iv[i+1]=cv
return iv
},{});
}
console.log(convertArrToObjWithIndexProp(sampleData));
答案 2 :(得分:0)
您可以通过执行此操作
let array = ['a','b','c'];
return array.reduce((acc, currentValue, index) => {
const key= index + 1;
acc[key] = currentValue;
return acc;
}, {});
输出将是这样
{
"1": "a",
"2": "b",
"3": "c"
}
答案 3 :(得分:0)
var arr = ['a','b','c'];
var result = arr.reduce((obj, val, index) => {
obj[index + 1] = val;
return obj;
}, {});
console.log(result);
答案 4 :(得分:0)
我将使用String
函数和对象计算属性来完成此操作。
val xmlResourceParser: XmlResourceParser = resources.getXml(R.xml.your_xml_file_name)