繁体   English   中英

为什么对象方法不返回值?

[英]Why does a object method not return a value?

在以下代码中,函数findById()实际上未返回任何内容。 console.log()按预期方式触发并打印,但结果是调用该函数的变量未定义。

我试图更改返回值类型,甚至只是简单地将return true; 最后没有条件,但始终是未定义的。 为了确保我没有错过简单的事情,我实际上创建了一个仅返回值istrue()的函数。 这实际上很好。

这是对象/方法的定义

const database = {
    // List of authenticated characters
    characters: [],
    addCharacter: function(c) {
        this.characters.push(c);
    },
    findById: function(id) {
        console.log('Searching for character...');
        this.characters.forEach((c) => {
            if (c.id === id) {
                console.log('Found');
                console.log('cid: ' + c.id);
                console.log('id: ' + id);
                return true; // Never actually returns
            }
        });
    },
    istrue: function() {
        return true;
    }
};

以及它在哪里被调用

const find = database.findById(characterIdToFind);
console.log(typeof find); // always undefined
console.log(find); // always undefined

我希望在我尝试过的此函数的至少一个排列中会有某种返回值。 函数的返回值永远不会有任何变化,只是undefined

嵌套函数内部的return语句从函数返回。

在这种情况下,可以使用some()代替forEach()因为您不能破坏forEach

findById: function(id) {
    console.log('Searching for character...');
    return this.characters.some(c => c.id === id)
}

如果要获取与给定条件匹配的对象,请使用find()

findById: function(id) {
    console.log('Searching for character...');
    return this.characters.find(c => c.id === id)
}

如果您在上面的两种方法中都看到过,则在每次迭代中我们都会隐式返回c.id === id ,但它不会从外部函数return

这是因为您尝试从forEach返回并且forEach不返回任何内容

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM