用惯用的javascript编写一个过滤器

Write a filter in idiomatic javascript

本文关键字:一个 过滤器 javascript      更新时间:2023-09-26

我有这个过滤器,我不喜欢:

var products = this.store.filter('product', function(product) {
    var ok = true;
    if (compatibility) {
        ok = ok && product.compatibility == compatibility;
    }
    if (format) {
        ok = ok && product.format == format;
    }
    if (priceRange) {
        ok = ok && product.priceRange == priceRange;
    }
    if (productType) {
        ok = ok && product.productType == productType;
    }
    return ok;
});

基本上,filter函数必须为通过测试的产品返回true,为未通过测试的返回false。滤波器参数的值可以是null

重写过滤函数的惯用方法是什么?

对于每一个失败的测试,立即使用return false;。如果你知道它失败了,那么进一步处理就没有意义了。

if( compatibility && product.compatibility != compatibility) {
    return false;
}
// ...
return true;

或者,(提示:不要这样做!),你可以做一个非常长的单行:

return (!compatibility || product.compatibility == compatibility) && (!format || product.format == format) // ...
// interestingly this shortcuts just like the "immediately return false" solution