Javascript 在知道字符串是什么时返回"undefined"



>我创建了一个循环访问一个数组的函数,使用每个值(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
}

最新更新