javascript количество объектов в массиве объектов без нулевых значений - PullRequest
0 голосов
/ 22 мая 2019

Допустим, у нас есть массив объектов:

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. Где проблема в итерации?

Ответы [ 6 ]

2 голосов
/ 22 мая 2019

Вы можете filter() массив, а затем получить object values и проверить, где не includes ноль.

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)

Подробнее о Значения объекта Фильтр Включает

1 голос
/ 22 мая 2019

Вы можете использовать Array.prototype.every, чтобы проверить, что все значения не равны нулю

var length = data.filter(i => Object.values(i).every(i => i !== null)).length
1 голос
/ 22 мая 2019
  objectsWithoutNull = data.reduce(function (r, a) {
        return r + +( Object.values(a).indexOf(null) == -1);
    }, 0); 

Это будет работать, если вы хотите проверить все свойства!

1 голос
/ 22 мая 2019

Опция состоит в том, чтобы перебрать значения объекта a и проверить, равно ли значение нулю.Если мы нашли ноль, не увеличивайте наш счетчик.

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);
1 голос
/ 22 мая 2019

Уменьшите массив, для каждого объекта получите значения с 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);
0 голосов
/ 22 мая 2019

Если вы используете 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);
...