为什么对象方法不是 return 值?

Why does a object method not return a value?

在下面的代码中,函数 findById() 实际上并没有 return 任何东西。 console.log()s 按预期触发并打印,但结果是调用函数的变量未定义。

我曾尝试更改 return 值类型,甚至只是将 return true; 放在末尾,没有条件,但它始终是未定义的。为了确保我没有遗漏一些简单的东西,我实际上创建了一个只有 return 值 istrue() 的函数。这实际上工作正常。

这是 object/method def

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

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

这是因为您正在尝试从 forEach return 并且 forEach 没有 return 任何东西

嵌套函数中的 return 语句 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)
}

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