Javascript подсчитывает объекты в массиве объектов без нулевых значений

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

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);

Я пытаюсь использовать метод уменьшения, но получил 0. Где проблема в итерации?

Вы хотите посмотреть на конкретную собственность или на все свойства?

Nina Scholz 22.05.2019 12:48

изменить на a.address!== null

Ravikumar 22.05.2019 12:52
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
2
2
5 003
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

Сократите массив, для каждого объекта получите значения с помощью 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);

Вы можете 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)

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

Опция состоит в том, чтобы перебрать значения объекта a и проверить, равно ли значение 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);
  objectsWithoutNull = data.reduce(function (r, a) {
        return r + +( Object.values(a).indexOf(null) == -1);
    }, 0); 

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

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

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

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

Другие вопросы по теме