当不处理带有非空字符串的else块时,ko.utils.arrayFirst总是返回null

for*_*atc 7 javascript knockout.js

这工作正常:

  self.getById = function(id) {
        return ko.utils.arrayFirst(self.PostArray(), function(item) {
            if (item.postId === id) {
                return item;
            }
            else {
                return 'not found';
            }
        });
    };

    console.log(self.PostArray().length);
    console.log(self.getById(170));
Run Code Online (Sandbox Code Playgroud)

但是如果我把return ''或者return null在其他块中我总是得到null,那为什么呢?

And*_*ker 19

你没有arrayFirst正确使用.arrayFirst期望一个返回truefalse评估每个项目的函数.返回函数返回的第一个项目true.这是它应该看起来的样子:

self.getById = function(id) {
    return ko.utils.arrayFirst(self.PostArray(), function(item) {
        return item.postId === id;
    }) || 'not found';
};
Run Code Online (Sandbox Code Playgroud)

基本上返回'not found'if itemfalse(null在这种情况下最有可能).

有关KnockoutJS中各种实用程序功能的更多信息,请参阅此文章.