我创建了一个循环遍历一个数组的函数,使用每个值 (item
) 来检查数组中是否存在不同的值 (clicked_item
) 项目
。
这很好用。在日志语句中,它正确地标识了父项 (item
) 和类型 (string
)。控制台输出:FOUND PARENT FOR: pinot-noir-gifts IT IS ITEM: red_wine_gifts TYPE: string
然而,return item
在应该返回 red_wine_gifts
时返回 undefined。结果是 clicked_item_parent
未定义。
为什么脚本能够记录一个值,但函数将其返回为未定义?
function find_parent(clicked_item)
{
filter_have_children.forEach( function(item){
var look_here = filter_children[item];
if ( look_here.indexOf(clicked_item) != "-1" )
{
console.log("FOUND PARENT FOR: "+clicked_item+" IT IS ITEM: "+item+" TYPE: "+typeof item);
return item;
}
});
}
var clicked_item_parent = find_parent(clicked_item);
if ( typeof clicked_item_parent !== "undefined" )
{
// Do some things
}
else console.log("parent was undefined");
最佳答案
您的 return
正在从 forEach
回调中返回一个值(该返回值被忽略)。您的 find_parent
函数永远不会返回任何内容,这就是调用它会导致 undefined
的原因。
find
在这种情况下,方法就是您想要的:
function find_parent(clicked_item)
{
return filter_have_children.find( function(item){
// ^^^^^^ ^^^^
var look_here = filter_children[item];
return look_here.indexOf(clicked_item) != -1; // <= Note -1 should be a number, not a string.
});
}
您的find
回调应该为您要查找的项目返回一个真值,或者为任何其他项目返回一个假值。它按顺序为数组中的每个元素调用,在您的回调第一次返回真值时停止。 find
的结果是您的回调所说的正确项,或者 undefined
如果您的回调从未返回真值。
关于Javascript 在知道字符串是什么时返回 "undefined",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62518915/