>我创建了一个循环访问一个数组的函数,使用每个值(item
(来检查名为item
的数组中是否存在不同的值(clicked_item
(。
这很好用。在 log 语句中,它正确标识父级 (item
( 和类型 (string
(。控制台中的输出:FOUND PARENT FOR: pinot-noir-gifts IT IS ITEM: red_wine_gifts TYPE: string
但是,当return item
返回时应返回red_wine_gifts
时,返回未定义。结果是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
。
forEach
不返回任何值。
从forEach
返回item
不会使其成为find_parent
函数的返回值。您需要将要返回的值保存在局部变量中,并从函数返回该局部变量find_parent
。
function find_parent(clicked_item)
{
let val; // variable to hold the item that should be returned
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);
val = item; // save item in local variable
}
});
return val; // return the local variable containing the item
}