首页 > 解决方案 > 使用 lodash 查找 JSON 中非空值的计数

问题描述

我有一个 JSON 响应,例如

let obj = [
  {
    id: 1,
    amount: null,
  },
  {
    id: 2,
    amount: 123,
  },
  {
    id: 3,
    amount: null,
  },
  {
    id: 4,
    amount: null,
  },
  {
    id: 5,
    amount: 100,
  },
];

我需要使用 lodash 函数查找上述 JSON 响应中存在的非空值的计数。

我在下面的代码中使用了正常的方式

for (var i = 0; i < obj.length; i++) {
  if (obj[i]['amount'] != null) {
    count++;
  }
}
console.log(count);

谁能给出如何使用 lodash 做同样的事情的想法?

标签: node.jslodash

解决方案


_.sumBy()如果不是 falsy(null或 0) ,您可以使用并返回 1:

const obj = [{"id":1,"amount":null},{"id":2,"amount":123},{"id":3,"amount":null},{"id":4,"amount":null},{"id":5,"amount":100}]

const result = _.sumBy(obj, ({ amount }) => amount ? 1 : 0)

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js" integrity="sha512-90vH1Z83AJY9DmlWa8WkjkV79yfS2n2Oxhsi2dZbIv0nC4E6m5AbH8Nh156kkM7JePmqD6tcZsfad1ueoaovww==" crossorigin="anonymous"></script>

另一种选择是用于计算具有或不_.countBy()具有amount值的项目,并取值:null'false'

const obj = [{"id":1,"amount":null},{"id":2,"amount":123},{"id":3,"amount":null},{"id":4,"amount":null},{"id":5,"amount":100}]

const result = _.countBy(obj, ({ amount }) => _.isNull(amount))['false']

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js" integrity="sha512-90vH1Z83AJY9DmlWa8WkjkV79yfS2n2Oxhsi2dZbIv0nC4E6m5AbH8Nh156kkM7JePmqD6tcZsfad1ueoaovww==" crossorigin="anonymous"></script>


推荐阅读