【问题标题】:javascript count objects in array of objects without null valuesjavascript在没有空值的对象数组中计算对象
【发布时间】:2019-05-22 10:46:04
【问题描述】:

假设我们有一个对象数组:

const data = [
  {
    firstName: "Bruce",
    lastName: "Wayne",
    address: "Arkham 6",
    id: "1",
  },
  {
    firstName: "Peter",
    lastName: "Parker",
     address: "LA 54",
    id: "2"
  },
  {
    firstName: "Tony",
    lastName: "Stark",
    address: null,
    id: "3"
  }
];

并且想要获取数组的长度但不包括具有空值的对象的计数(在上面的示例中,这是具有地址属性null 的最后一个对象),因此上面示例的计数结果将是2.

objectsWithoutNull = data.reduce(function (r, a) {
    return r + +( a!== null);
}, 0);

我正在尝试使用 reduce 方法,但得到了 0。 迭代的问题在哪里?

【问题讨论】:

  • 您要查看特定属性还是查看所有属性?
  • 更改为a.address!== null

标签: javascript arrays javascript-objects


【解决方案1】:

您可以filter() 数组,然后获取object values 并检查其中不是includes null。

const data = [
  {
    firstName: "Bruce",
    lastName: "Wayne",
    address: "Arkham 6",
    id: "1",
  },
  {
    firstName: "Peter",
    lastName: "Parker",
     address: "LA 54",
    id: "2"
  },
  {
    firstName: "Tony",
    lastName: "Stark",
    address: null,
    id: "3"
  }
];

const notNullable = data.filter(obj=>!Object.values(obj).includes(null));
console.log(notNullable)
console.log(notNullable.length)

更多关于Object ValuesFilterIncludes

【讨论】:

    【解决方案2】:

    减少数组,为每个对象获取Object.values() 的值,并检查Array.includes() 是否包含null 值。用! 否定包含的布尔结果,并使用+ 运算符转换为数字。将数字添加到累加器中。

    const data = [{"firstName":"Bruce","lastName":"Wayne","address":"Arkham 6","id":"1"},{"firstName":"Peter","lastName":"Parker","address":"LA 54","id":"2"},{"firstName":"Tony","lastName":"Stark","address":null,"id":"3"}];
    
    const result = data.reduce((r, o) => 
      r + +!Object.values(o).includes(null)
    , 0);
    
    console.log(result);

    【讨论】:

      【解决方案3】:

      一个选项是迭代 a 的对象值并测试该值是否等于 null。如果我们发现一个 null 不要增加我们的计数器。

      const data = [
        {
          firstName: "Bruce",
          lastName: "Wayne",
          address: "Arkham 6",
          id: "1",
        },
        {
          firstName: "Peter",
          lastName: "Parker",
           address: "LA 54",
          id: "2"
        },
        {
          firstName: "Tony",
          lastName: "Stark",
          address: null,
          id: "3"
        }
      ];
      
      let objectsWithoutNull = data.reduce(function (r, a) {
        let hasNull = false;
        const values = Object.values(a);
        values.map(v => {
          if (v === null) {
            hasNull = true;
          }
        });
        
        return r + !hasNull;
      }, 0);
      
      console.log(objectsWithoutNull);

      【讨论】:

        【解决方案4】:
          objectsWithoutNull = data.reduce(function (r, a) {
                return r + +( Object.values(a).indexOf(null) == -1);
            }, 0); 
        

        如果您想检查所有属性,这将起作用!

        【讨论】:

          【解决方案5】:

          您可以使用 Array.prototype.every 来检查所有值是否不为空

          var length = data.filter(i => Object.values(i).every(i => i !== null)).length
          

          【讨论】:

            【解决方案6】:

            如果你使用的是 lodash。

            const data = [
                  {
                    firstName: "Bruce",
                    lastName: "Wayne",
                    address: "Arkham 6",
                    id: "1",
                  },
                  {
                    firstName: "Peter",
                    lastName: "Parker",
                     address: "LA 54",
                    id: "2"
                  },
                  {
                    firstName: "Tony",
                    lastName: "Stark",
                    address: null,
                    id: "3"
                  }
                ];
            
            const counter = _.filter(data, ({address}) => {return address != null}).length;
            console.log(counter);
            

            【讨论】:

              猜你喜欢
              • 2014-02-24
              • 1970-01-01
              • 2021-01-02
              • 2021-10-26
              • 2013-06-03
              • 1970-01-01
              • 1970-01-01
              • 2021-08-17
              • 2011-10-06
              相关资源
              最近更新 更多