Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.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 reactjs方法始终返回未定义的_Javascript_Reactjs - Fatal编程技术网

Javascript reactjs方法始终返回未定义的

Javascript reactjs方法始终返回未定义的,javascript,reactjs,Javascript,Reactjs,我的方法很简单。它循环遍历一个对象数组,并返回参数中具有给定id的对象。这是: returnValueToDelete(id) { this.state.rows.map(function(value) { if (value["id"] === id) { console.log(value); return value; } }); } 当我在渲染函数中使用实际id调用此方法时,如下所示: console.log(

我的方法很简单。它循环遍历一个对象数组,并返回参数中具有给定id的对象。这是:

returnValueToDelete(id) {
    this.state.rows.map(function(value) {
      if (value["id"] === id) {
        console.log(value);
        return value;
      }
    });
  }
当我在渲染函数中使用实际id调用此方法时,如下所示:

console.log(this.returnValueToDelete("IDThatExists"));
自调用后,它将首先在
returnValueToDelete
函数中打印正确的值,但随后会打印未定义的值。有人能解释一下我为什么以及如何解决这个问题吗?我在render方法中打印它,因为我想在使用它之前测试它,但它似乎总是返回
undefined
,因为我们正在打印返回的内容。非常感谢您的帮助

编辑

这是我的This.state.rows:

rows: [
    {
      id: "name",
      numeric: false,
      disablePadding: true,
      label: "Dessert (100g serving)"
    },
    {
      id: "calories",
      numeric: true,
      disablePadding: false,
      label: "Calories"
    },
    {
      id: "fat",
      numeric: true,
      disablePadding: false,
      label: "Fat (g)"
    },
    {
      id: "carbs",
      numeric: true,
      disablePadding: false,
      label: "Carbs (g)"
    },
    {
      id: "protein",
      numeric: true,
      disablePadding: false,
      label: "Protein (g)"
    }
  ]

我不知道为什么要使用
Array.prototype.map()

如果要查找匹配元素,可以使用
Array.prototype.find()
,如下所示

returnValueToDelete(id){
返回this.state.rows.find(e=>value[“id”]==id);
}

它打印的是未定义的。有人能解释一下我为什么以及如何解决这个问题吗


因为您忘记了
return
语句。

我不知道您为什么使用
Array.prototype.map()

如果要查找匹配元素,可以使用
Array.prototype.find()
,如下所示

returnValueToDelete(id){
返回this.state.rows.find(e=>value[“id”]==id);
}

它打印的是未定义的。有人能解释一下我为什么以及如何解决这个问题吗

因为您忘记了
return
语句

它打印的是未定义的。有人能解释一下我为什么以及如何解决这个问题吗

您正在正确创建新数组,但没有对结果进行任何处理。您可以将其保存到变量,然后返回:

const arr = this.state.rows.map(...
...
return arr;
或者直接返回结果:

return this.state.rows.map(...

也就是说,看起来您正在尝试返回原始数组的子集。因此,您应该使用
filter()
而不是
map()

并使用胖箭头语法:

returnValueToDelete(id) {
  return this.state.rows.filter(value => value["id"] === id);
}

演示
const行=[
{
id:“姓名”,
数字:false,
disablePadding:对,
标签:“甜点(100克)
},
{
id:“卡路里”,
数字:对,
禁用填充:false,
标签:“卡路里”
},
{
id:“脂肪”,
数字:对,
禁用填充:false,
标签:“脂肪(g)”
},
{
id:“碳水化合物”,
数字:对,
禁用填充:false,
标签:“碳水化合物(g)”
},
{
id:“蛋白质”,
数字:对,
禁用填充:false,
标签:“蛋白质(g)”
}
];
常量returnValueToDelete=(id)=>{
返回rows.filter(value=>value[“id”]==id);
}
console.log(returnValueToDelete(“fat”)
它打印的是未定义的。有人能解释一下我为什么以及如何解决这个问题吗

您正在正确创建新数组,但没有对结果进行任何处理。您可以将其保存到变量,然后返回:

const arr = this.state.rows.map(...
...
return arr;
或者直接返回结果:

return this.state.rows.map(...

也就是说,看起来您正在尝试返回原始数组的子集。因此,您应该使用
filter()
而不是
map()

并使用胖箭头语法:

returnValueToDelete(id) {
  return this.state.rows.filter(value => value["id"] === id);
}

演示
const行=[
{
id:“姓名”,
数字:false,
disablePadding:对,
标签:“甜点(100克)
},
{
id:“卡路里”,
数字:对,
禁用填充:false,
标签:“卡路里”
},
{
id:“脂肪”,
数字:对,
禁用填充:false,
标签:“脂肪(g)”
},
{
id:“碳水化合物”,
数字:对,
禁用填充:false,
标签:“碳水化合物(g)”
},
{
id:“蛋白质”,
数字:对,
禁用填充:false,
标签:“蛋白质(g)”
}
];
常量returnValueToDelete=(id)=>{
返回rows.filter(value=>value[“id”]==id);
}

console.log(returnValueToDelete(“fat”)下面是一个在状态中硬编码行的示例

 this.state = {
   rows: [
     {id:1, name: 'ss'},
     {id:2, name: 'aa'}
   ]
 };

  returnValueToDelete(id) {
    return this.state.rows.filter(value => value.id === id)
  }

  console.log(this.returnValueToDelete(1))

下面是一个在状态中硬编码行的示例

 this.state = {
   rows: [
     {id:1, name: 'ss'},
     {id:2, name: 'aa'}
   ]
 };

  returnValueToDelete(id) {
    return this.state.rows.filter(value => value.id === id)
  }

  console.log(this.returnValueToDelete(1))

您的
此.state.rows是什么?在
else
案例中也提供return。在
this.state.rows.map…
@Arseniy II this.state.rows之前放置一个
return
,其中一个键是“id”。请参见编辑您的
此.state.rows是什么?在
else
案例中也提供return。在
this.state.rows.map…
@Arseniy II this.state.rows之前放置一个
return
,其中一个键是“id”。看,这仍然不起作用。我使用的是
我应该使用
this.state.rows[“id”]
请提供你的
this.state.rows
内容这仍然不起作用。我使用的是
value
而不是
this.state.rows[“id”]
请提供您的
this.state.rows
内容谢谢您的回答。似乎它只适用于胖箭头语法。@tee,对不起。修正了一个错误:p感谢答案。似乎它只适用于胖箭头语法。@tee,对不起。修正了一个错误:P