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

时间:2014-01-19 20:50:20

标签: 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));

但如果我将return ''return null放入else块中,我总是会为空,为什么会这样?

1 个答案:

答案 0 :(得分:18)

您没有正确使用arrayFirstarrayFirst需要一个返回truefalse的函数,评估每个项目。返回函数返回true的第一个项目。以下是它的外观:

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

如果'not found'是假的,则基本上会返回item(在这种情况下最有可能是null)。

有关KnockoutJS中各种实用程序功能的更多信息,请参阅this article