【问题标题】:Referencing a function within .map method在 .map 方法中引用函数
【发布时间】:2021-07-25 16:21:12
【问题描述】:

我正在学习地图功能(我对 JS 和编码非常陌生)。 首先,我在使用map-method的地方直接定义了内部函数;效果很好。 我稍后尝试通过对函数的引用使其工作,但我不断收到“无法读取未定义的属性'0'”。 将不胜感激任何帮助,因为这可能是我无法理解的非常基本的东西......

// this is working 


let arrayOfWords = (['abc', 'bbc', 'cbc'])

function getUpperCase(arrayOfWords) {
    let wordArray2 = arrayOfWords.map(function(item) {
     return item = (item[0].toUpperCase()) + item.slice(1);
  });
  return wordArray2
}

// "Cannot read property '0' of undefined"

let arrayOfWords = (['abc', 'bbc', 'cbc'])

function getUpperCase(arrayOfWords) {
  let wordArray2 = arrayOfWords.map(convert());
  return wordArray2
}

function convert(item){
     return item = (item[0].toUpperCase()) + item.slice(1);
  }

【问题讨论】:

  • 请你分享一个arrayOfWords 的例子来证明这个问题?
  • wordArray 在第二个函数中应该是 arrayOfWords?
  • wordArray.map(convert()) 应该是 wordArray.map(convert) (传递对函数的引用,而不是调用函数的结果)但是如果没有看到您的输入值,我们将无能为力。在第一个示例中,顺便说一句,您没有从函数返回值。
  • 当然应该是arrayOfWords,我在这里改写时出错了
  • 输入示例:(['abc', 'bbc', 'cbc'])

标签: javascript methods


【解决方案1】:

内部地图回调必须是convert 而不是convert()

function getUpperCase(arrayOfWords) {
  let wordArray2 = arrayOfWords.map(convert);
  return wordArray2
}

function convert(item) {
  return item = (item[0].toUpperCase()) + item.slice(1);
}

console.log(getUpperCase(['erferf', 'erferf', 'sdxsdxsdx']))

这是因为convert() 会立即执行,而itemundefined。所以它会抛出错误

function getUpperCase(arrayOfWords) {
  let wordArray2 = arrayOfWords.map(convert());
  return wordArray2
}

function convert(item) {
  console.log(item)
  return item = (item[0].toUpperCase()) + item.slice(1);
}
console.log(getUpperCase(['erferf', 'erferf', 'sdxsdxsdx']))

【讨论】:

  • 非常感谢!很高兴能这么快得到帮助。
【解决方案2】:

您的两个示例几乎都是正确的,除了在第一个示例中您没有返回函数中的任何内容,而在第二个示例中调用 函数并期望结果,而不是传递一个 reference 用于该函数以用作map 函数中的回调。

const arr = ['abc', 'bbc', 'cbc'];

function getUpperCase(arrayOfWords) {
  return arrayOfWords.map(function(item) {
     return item = (item[0].toUpperCase()) + item.slice(1);
  });
}

console.log(getUpperCase(arr));

const arr = ['abc', 'bbc', 'cbc'];

function convert(item){
  return item = (item[0].toUpperCase()) + item.slice(1);
}


function getUpperCase(arrayOfWords) {
  return arrayOfWords.map(convert);
}

console.log(getUpperCase(arr));

【讨论】:

  • 谢谢!我想,它是一个函数,所以它需要括号;但你的解释让我明白了:)
【解决方案3】:

只需去掉回调函数convert中的括号即可:

let wordArray2 = arrayOfWords.map(convert);

【讨论】:

  • 谢谢,这正是问题所在。无法认为引用应该没有括号;现在说得通了!
猜你喜欢
  • 2022-11-22
  • 2020-02-24
  • 2021-04-09
  • 1970-01-01
  • 2017-08-23
  • 1970-01-01
  • 2021-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多