您好我想将数组转换为对象
输入= [1,2,3]
预期产出= {1:1,2:2,3:3}
我试过这个
const arrToObj = (arr) => {
arr.reduce((acc, curr, i, arr)=> {
acc[curr]=arr[i]
},{})
}
console.log(arrToObj([1,2,3,4,5,6,7,8,9]))
但它在第二次迭代中抛出错误。 有什么问题以及如何使其发挥作用?
答案 0 :(得分:0)
这样的事情?
const arr = [1,2,3,4,5,6,7,8,9]
const obj = arr.reduce((accumulator, currentValue, index) => {
accumulator[index+1] = currentValue;
return accumulator;
}, {});
console.log(obj)
答案 1 :(得分:0)
到目前为止你所尝试的有两个问题
第一个是严肃的:
您忘记从累积函数返回,因此返回undefined
。
它第二次抛出因为Array.prototype.reduce
将指定的种子作为第一次调用累加函数的第一个参数传递,但是在第二次调用时,它传递第一次调用的结果。
所以最初,减少调用你的函数
result = accumulatorFunction(seed, arr[0], 0, arr);
扩展为
result = accumulatorFunction({}, 1, 0, [1, 2, 3]);
然而,后续调用看起来像这样
result = accumulatorFunction(result, arr[1], 1 arr);
扩展为
result = accumulatorFunction(undefined, 2, 1, [1, 2, 3]);
所以你需要写一些像
这样的东西arr.reduce((acc, curr, i, arr) => {
acc[curr] = arr[i];
return acc;
}, {});
您的代码的另一个问题,以及更多的样式,是您不必要地提供和使用传递给累积函数的第四个参数。无论如何,这个论点只是数组本身。使用它很尴尬,使你的代码更复杂,更容易出错,更难理解。
改为写
arr.reduce((acc, curr) => {
acc[curr] = curr;
return acc;
}, {});
"use strict";
const input = [1, 2, 3];
const output = input.reduce((acc, curr) => {
acc[curr] = curr;
return acc;
}, {});
console.log(output);
答案 2 :(得分:0)
const arrToObj = a => a.reduce((r, v) => (r[v] = v, r), {})
console.log( arrToObj( [1, 2, 3] ) )
如果值与索引匹配,使用ECMAScript 2018 Spread syntax可以更简单:
console.log( { ...[, 1, 2, 3] } )