【问题标题】:Reduce to Object error: cannot create property减少到对象错误:无法创建属性
【发布时间】:2022-01-26 15:11:34
【问题描述】:

我正在尝试使用数组的函数输入和回调创建一个对象。

它没有按预期工作

function arrToObj(array, callback) {

  return array.reduce((acc, currStr) => {
    return acc[currStr] = callback(currStr)
  }, {})
}
const arrOfStrings = ['str1', 'str2'];
const capitalize = str => str.toUpperCase();
console.log(arrToObj(arrOfStrings, capitalize)); // expecting: {str1 : STR1, str2 : STR2}

我收到一个错误:第 4 行的类型错误:无法在字符串“STR1”上创建属性“str2”

我觉得在 reduce 中我从根本上错过了一些东西。 我很感激任何能进一步加深我的知识的见解。

【问题讨论】:

  • 看起来您想返回整个acc 对象,而不是您刚刚分配的属性的值

标签: javascript arrays object reduce higher-order-functions


【解决方案1】:

问题出在您的 reduce 函数中。最后你没有返回acc。

function arrToObj(array, callback) {
  return array.reduce((acc, currStr) => {
    acc[currStr] = callback(currStr);
    return acc;
  }, {})
}

const arrOfStrings = ['str1', 'str2'];
const capitalize = str => str.toUpperCase();
console.log(arrToObj(arrOfStrings, capitalize)); // expecting: {str1 : STR1, str2 : STR2}

【讨论】:

  • 我非常感谢您的洞察力!在reduce中存在一些误解。谢谢你教我一些东西!
  • @SabreTheCat 很高兴为您提供帮助。如果这解决了您的问题,请将其标记为答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-15
  • 1970-01-01
  • 2022-08-23
  • 2022-11-13
  • 1970-01-01
  • 2014-06-09
  • 2018-09-29
相关资源
最近更新 更多