以下代码将对象转换为{“ a”:“ 1”,“ b”:“ 2”,“ c”:“ 3”,“ d”:“ 4”,“ e”:“ 5”} ,在reduce中,它遍历数组并生成所需的输出。但是减少抛出TypeError:undefined不是一个函数。
我已经遍历了很多链接,但是这些链接并不是解决我的错误的方法。
欢迎任何类型的帮助。
请检查下面的代码段
let a= {
"a": ["1", "2"],
"b": ["2", "2"],
"c": ["3", "2"],
"d": ["4", "2"],
"e": ["5", "2"]
}
const b= Object.assign(...Object.entries(a).map(value => value.map((value1, index) => index == 0 ? value1 : value1[0])).reduce((a, c) => {
//console.log('c', c);
a[c[0]] = c[1];
console.log(a);
return a;
}, {}));
答案 0 :(得分:6)
可以将问题简化为尝试将对象扩展到参数列表中:
let a = {
"a": ["1", "2"],
"b": ["2", "2"],
"c": ["3", "2"],
"d": ["4", "2"],
"e": ["5", "2"]
}
const reduceResult = Object.entries(a)
.map(value => value
.map((value1, index) => index == 0 ? value1 : value1[0])
)
.reduce((a, c) => {
a[c[0]] = c[1];
return a;
}, {});
console.log('about to Object.assign');
const b = Object.assign(
...reduceResult
);
对象不能散布到参数列表中-对象只能散布到其他对象中,例如
const b = { ...reduceResult };
但是没有必要进行传播-仅凭reduce
的结果,就可以满足需要。您还可以通过删除两个.map
并仅使用reduce
来简化代码:
let a = {
"a": ["1", "2"],
"b": ["2", "2"],
"c": ["3", "2"],
"d": ["4", "2"],
"e": ["5", "2"]
}
const b = Object.entries(a)
.reduce((acc, [key, [firstValue]]) => ({...acc, [key]: firstValue}), {})
console.log(b);