Javascript reactjs方法始终返回未定义的
我的方法很简单。它循环遍历一个对象数组,并返回参数中具有给定id的对象。这是: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(
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