在以下代码中,函数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
。
答案 0 :(得分:4)
嵌套函数中的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
。
答案 1 :(得分:2)
这是因为您尝试从forEach
返回,而forEach
不返回任何内容