这是否可以将查找结果转换为布尔值。因为我是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;
});
}
};
答案 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完全相同,但返回一个布尔值