如何在使用lodash过滤器时包含null/未定义的值



我想过滤一个特定的对象属性。如果该属性为false或undefined/null,我希望它包含在内。在下面的例子中,我通过deliciousRating进行总结,只要isBruised不成立。但是,我不知道如何包含undefined/null值。

var apples = [
{isBruised: true, deliciousRating: 1},
{isBruised: false, deliciousRating: 10},
{deliciousRating: 9}
];
_.sumBy(_.filter(apples, ['isBruised', false]), 'deliciousRating');

我希望这个能返回19,但目前它只得到苹果的美味评级[1]。

使用_.reject()而不是_.filter()_.reject()方法是…

与_.filter相反;该方法返回的元素谓词不返回truthy for的集合。

var apples = [
{isBruised: true, deliciousRating: 1},
{isBruised: false, deliciousRating: 10},
{deliciousRating: 9}
];
var result = _.sumBy(_.reject(apples, 'isBruised'), 'deliciousRating');
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

在vanillaJS中,您可以使用Array#reduce来对未受损的项目求和:

var apples = [
{isBruised: true, deliciousRating: 1},
{isBruised: false, deliciousRating: 10},
{deliciousRating: 9}
];
var result = apples.reduce(function(s, o) {
return o.isBruised ? s : s + o.deliciousRating;
}, 0);
console.log(result);

我将使用本机过滤函数.filter((v) => !v.isBruised)。如果isBruisednullundefinedfalse或不存在,则将包括deliciousRating密钥。

const apples = [
{isBruised: true, deliciousRating: 1},
{isBruised: false, deliciousRating: 10},
{deliciousRating: 9}
];
const r = _.sumBy(apples.filter((v) => !v.isBruised), 'deliciousRating');
console.log(r);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

最新更新