Автор оригинала: FreeCodeCamp Community Member.
Знание того, как быстро проиграть через массив и объекты подсчета обманчиво просто. Длина () Способ сообщит вам общее количество значений в массиве, но что, если вы хотите сосчитать только эти значения, основанные на определенных условиях?
Например, представьте, что у вас есть такой массив:
const storage = [
{ data: '1', status: '0' },
{ data: '2', status: '0' },
{ data: '3', status: '0' },
{ data: '4', status: '0' },
{ data: '5', status: '0' },
{ data: '6', status: '0' },
{ data: '7', status: '1' },
];И вы хотите сосчитать количество объектов с Статус установить '0' Отказ
Как и только для всего программирования, есть несколько способов сделать это. Мы пройдем несколько общих методов ниже.
Используйте A для цикла
Вероятно, самый простой способ было бы объявить счетчик Переменная, петля через массив и итерацию прилавок только если Статус равно '0' :
const storage = [
{ data: '1', status: '0' },
{ data: '2', status: '0' },
{ data: '3', status: '0' },
{ data: '4', status: '0' },
{ data: '5', status: '0' },
{ data: '6', status: '0' },
{ data: '7', status: '1' },
];
let counter = 0;
for (let i = 0; i < storage.length; i++) {
if (storage[i].status === '0') counter++;
}
console.log(counter); // 6Вы можете немного упростить это, используя для ... из петля:
const storage = [
{ data: '1', status: '0' },
{ data: '2', status: '0' },
{ data: '3', status: '0' },
{ data: '4', status: '0' },
{ data: '5', status: '0' },
{ data: '6', status: '0' },
{ data: '7', status: '1' },
];
let counter = 0;
for (const obj of storage) {
if (obj.status === '0') counter++;
}
console.log(counter); // 6Кроме того, вы можете создать функцию, чтобы сделать то же самое, если у вас есть другие массивы объектов, которые будут подсчитаны условно:
const storage = [
{ data: '1', status: '0' },
{ data: '2', status: '0' },
{ data: '3', status: '0' },
{ data: '4', status: '0' },
{ data: '5', status: '0' },
{ data: '6', status: '0' },
{ data: '7', status: '1' },
];
function statusCounter(inputs) {
let counter = 0;
for (const input of inputs) {
if (input.status === '0') counter += 1;
}
return counter;
}
statusCounter(storage); // 6Используйте методы массива
JavaScript включает в себя кучу полезных методов при работе с массивами. Каждый может быть привязан к массиву и передал разные параметры для работы, когда итерация через элементы в массиве.
Двое мы смотрели на себя Фильтр () и Уменьшить () Отказ
фильтр()
Метод фильтра делает только что – это итерации через каждый элемент в массиве и фильтрует все элементы, которые не соответствуют условиям, которые вы предоставляете. Затем он возвращает новый массив со всеми элементами, которые возвращаются TRUE на основе ваших условий (ов).
Например:
const storage = [
{ data: '1', status: '0' },
{ data: '2', status: '0' },
{ data: '3', status: '0' },
{ data: '4', status: '0' },
{ data: '5', status: '0' },
{ data: '6', status: '0' },
{ data: '7', status: '1' },
];
const count = storage.filter(function(item){
if (item.status === 0) {
return true;
} else {
return false;
}
});
/*
[
{ data: '1', status: '0' },
{ data: '2', status: '0' },
{ data: '3', status: '0' },
{ data: '4', status: '0' },
{ data: '5', status: '0' },
{ data: '6', status: '0' }
]
*/Теперь, когда вы отфильтровывали объект с помощью Статус: «1» Просто позвоните в Длина () Метод на новом массиве, чтобы получить общее количество объектов с Статус: «1» :
const storage = [
{ data: '1', status: '0' },
{ data: '2', status: '0' },
{ data: '3', status: '0' },
{ data: '4', status: '0' },
{ data: '5', status: '0' },
{ data: '6', status: '0' },
{ data: '7', status: '1' },
];
const count = storage.filter(function(item){
if (item.status === 0) {
return true;
} else {
return false;
}
}).length; // 6Но это может быть много сокращено с синтаксисом ES6:
const storage = [
{ data: '1', status: '0' },
{ data: '2', status: '0' },
{ data: '3', status: '0' },
{ data: '4', status: '0' },
{ data: '5', status: '0' },
{ data: '6', status: '0' },
{ data: '7', status: '1' },
];
const count = storage.filter(item => item.status === '0').length; // 6уменьшать()
Думать о Уменьшить () Метод, как швейцарский армейский нож – это чрезвычайно гибко, и позволяет взять на себя массив в качестве ввода и преобразовывать его в почти что угодно. Еще лучше, как Фильтр () Этот метод возвращает новый массив, оставляя оригинал без изменений.
Вы можете прочитать больше о Уменьшить () в Эта статья Отказ
Для наших целей мы хотим взять на себя массив, изучить его содержание и производить номер. Вот простой способ сделать это:
const storage = [
{ data: '1', status: '0' },
{ data: '2', status: '0' },
{ data: '3', status: '0' },
{ data: '4', status: '0' },
{ data: '5', status: '0' },
{ data: '6', status: '0' },
{ data: '7', status: '1' },
];
const count = storage.reduce((counter, obj) => {
if (obj.status === '0') counter += 1
return counter;
}, 0); // 6Вы можете еще больше упростить с помощью синтаксиса ES6 и оператора Ternary:
const storage = [
{ data: '1', status: '0' },
{ data: '2', status: '0' },
{ data: '3', status: '0' },
{ data: '4', status: '0' },
{ data: '5', status: '0' },
{ data: '6', status: '0' },
{ data: '7', status: '1' },
];
const count = storage.reduce((counter, obj) => obj.status === '0' ? counter += 1 : counter, 0); // 6И даже немного больше, используя деструктивность объекта:
const storage = [
{ data: '1', status: '0' },
{ data: '2', status: '0' },
{ data: '3', status: '0' },
{ data: '4', status: '0' },
{ data: '5', status: '0' },
{ data: '6', status: '0' },
{ data: '7', status: '1' },
];
const count = storage.reduce((counter, { status }) => status === '0' ? counter += 1 : counter, 0); // 6Таким образом, это несколько способов пройти сквозь элементы массива и считать их условно. Теперь выйдите туда и рассчитывайте с уверенностью!
Оригинал: “https://www.freecodecamp.org/news/how-to-count-objects-in-an-array/”