Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript .map()参数未定义_Javascript_Reactjs - Fatal编程技术网

Javascript .map()参数未定义

Javascript .map()参数未定义,javascript,reactjs,Javascript,Reactjs,我有一个包含数据的数组,我想将数据与event.target.value进行比较 当它是相同的值时,我希望它能够获得关于数组中该位置的数据的更多信息 它说角色没有定义,我想这是一个范围问题,但我不知道如何解决它 log(character.mass,character.height)用于测试目的 handleClick(event){ event.preventDefault(); const CharacterDataArray = this.props.Ch

我有一个包含数据的数组,我想将数据与event.target.value进行比较 当它是相同的值时,我希望它能够获得关于数组中该位置的数据的更多信息

它说角色没有定义,我想这是一个范围问题,但我不知道如何解决它

log(character.mass,character.height)用于测试目的

handleClick(event){

        event.preventDefault();
        const CharacterDataArray = this.props.CharacterData.results
        console.log(CharacterDataArray)

        if(CharacterDataArray.map(character => character.name === event.target.value)) {
            console.log(character.mass, character.height)
        }
        this.setState({
            CharacterName: event.target.value
        })
}

您需要使用箭头函数来解决scop问题,如

 handleClick =(event)=>{
  // your code goes here 
}
或者可以在构造函数中绑定click事件,如

constructor () {
this.handleClick = this.handleClick.bind(this);
}

除了使用
.map
之外,您还可以使用
.some
作为参考,您可以转到以下链接:
问题是,
字符
仅在
映射
的回调函数中定义

请尝试以下方法:

// Look through all characters and return it if the name matches
const matchingChar = CharacterDataArray.find(character => character.name === event.target.value)

// Log if a match has been found
if (matchingChar) {
    console.log(matchingChar.mass, matchingChar.height);
}

使用
find
方法查找
字符.name
等于
事件.target.value
的字符

 const  hasValue =  CharacterDataArray.find(character => character.name === event.target.value)

   if(hasValue) {

 // write your logic
     }

首先需要使用arrow函数,因为在arrow函数中可以访问“this”,其次需要检查数组是否为空

    handleClick  = (event) => {

        event.preventDefault();

        if(this.props.CharacterData.results && this.props.CharacterData.results.length > 0) {

     if(this.props.CharacterData.results.map(character => character.name === event.target.value)) {
            console.log(character.mass, character.height)
        }
        this.setState({
            CharacterName: event.target.value
        })

     }
   }
试试这个:-

CharacterDataArray.map((character) => {  
 if (character.name === event.target.value)) 
  { 
   console.log(character.mass, character.height)
  }
 })

还可以添加console.log(CharacterDataArray)的结果吗?为什么要在if语句中使用
map
的结果作为条件?是否检查空数组?
字符
仅在
map()中使用。您尝试在
if
语句中对其进行console.log。这就是为什么它没有定义。@byxor我这样做是因为我想返回this.state,但不知道它是否正确?你能推荐一个forEach()吗?我在下面的帖子中使用了@sandrooco的解决方案,结果是可选的箭头函数。谢谢你的帮助!如果您的
this.props
无法访问,则必须将您更改为
箭头函数
例如:
handleClick=()=>{…}
此功能有效@sandrooco,箭头功能是可选的,双向工作。谢谢
preventDefault()
不返回任何承诺吗?其他代码将抛出一个错误。。。(
result
是数组,而不是对象)。
CharacterDataArray.map((character) => {  
 if (character.name === event.target.value)) 
  { 
   console.log(character.mass, character.height)
  }
 })