为什么我的查找方法 return 未定义?
Why would my find method return undefined?
我正在重新创建一些 Underscore.js 方法来研究 JavaScript 和一般编程。
下面是我尝试重新创建 Underscore 的 _.find()
方法。
var find = function(list, predicate) { // Functional style
_.each(list, function(elem){
if (predicate(elem)) {
return elem;
}
});
};
var find = function(list, predicate) { // Explicit style
if (Array.isArray(list)) {
for (var i = 0; i < list.length; i++) {
if (predicate(list[i])) {
return list[i];
}
}
} else {
for (var key in list) {
if (predicate(list[key])) {
return list[key];
}
}
}
};
我的第二个 find
方法,它使用 for
循环和 for in
循环。然而,我的第一个 find
方法是 return undefined
。我相信两者都应该做同样的工作。然而,他们没有。有人能指出这是怎么回事吗?
您的 return
仅从内部(嵌套)函数返回,而您的 find
函数确实没有返回任何内容,因此 undefined
.
试试这个:
var find = function(list, predicate) { // Functional style
var ret;
_.each(list, function(elem){
if (!ret && predicate(elem)) {
return ret = elem;
}
});
return ret;
};
我正在重新创建一些 Underscore.js 方法来研究 JavaScript 和一般编程。
下面是我尝试重新创建 Underscore 的 _.find()
方法。
var find = function(list, predicate) { // Functional style
_.each(list, function(elem){
if (predicate(elem)) {
return elem;
}
});
};
var find = function(list, predicate) { // Explicit style
if (Array.isArray(list)) {
for (var i = 0; i < list.length; i++) {
if (predicate(list[i])) {
return list[i];
}
}
} else {
for (var key in list) {
if (predicate(list[key])) {
return list[key];
}
}
}
};
我的第二个 find
方法,它使用 for
循环和 for in
循环。然而,我的第一个 find
方法是 return undefined
。我相信两者都应该做同样的工作。然而,他们没有。有人能指出这是怎么回事吗?
您的 return
仅从内部(嵌套)函数返回,而您的 find
函数确实没有返回任何内容,因此 undefined
.
试试这个:
var find = function(list, predicate) { // Functional style
var ret;
_.each(list, function(elem){
if (!ret && predicate(elem)) {
return ret = elem;
}
});
return ret;
};