Javascript& lodash ...将__find结果转换为布尔值

时间:2015-12-27 21:40:41

标签: javascript

这是否可以将查找结果转换为布尔值。因为我是JS的新手,我不确定是否有任何陷阱。这目前有效,但它是否可以接受,是否有更好的做法?

        collection.contains = function collectionHas(name, value, key) {
            key = _.isString(key) ? key : 'app_id';
            if (_.has(store, name)) {
                return !!_.find(store[name], function(item, k) {
                    return item[key] == value;
                });
            }
        };

2 个答案:

答案 0 :(得分:2)

不,您不应该将find操作的结果直接转换为布尔值。例如,如果您在数组中搜索数字0,那么在成功时返回的值将为0,它将被强制转换为布尔值false。详细了解JavaScript here中的类型强制。

因此,您应该使用===运算符对undefined进行严格比较,这是_.find在找不到任何内容时返回的内容。来自lodash文档:

  

返回   (*):返回匹配的元素,否则为undefined。

所以你的代码会变成:

    collection.contains = function collectionHas(name, value, key) {
        key = _.isString(key) ? key : 'app_id';
        if (_.has(store, name)) {
            return undefined !== _.find(store[name], function(item, k) {
                return item[key] == value;
            });
        }
    };

答案 1 :(得分:1)

使用_.some,它的功能与find完全相同,但返回一个布尔值