TypeError:undefined不是一个函数Array.reduce

时间:2018-10-14 22:45:32

标签: javascript

以下代码将对象转换为{“ 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;
}, {}));

1 个答案:

答案 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);