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

标签 javascript undefined

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

相关文章:

javascript - 在输入框中输入时用字母图像替换文本

javascript - RXJS 链依赖的 observables 顺序,但获取进度条的每个发射

node.js - 如何修复: Cannot read property 'keycloak-token' of undefined in node js?

php - 调用未定义函数 phpob_start()

c++ - undefined reference ,编译错误

javascript - 未定义为局部范围内的有效变量名

javascript - Vue.js "Cannot read property ... of undefined"- 解决这个预期的行为

javascript - 使用ajax成功:function(data) on document ready jquery function

javascript - 我的检测 keydown 和 value 的功能不起作用

javascript - Javascript 的原生排序方法是如何工作的?