Как посчитать количество элементов в массиве
Перейти к содержимому

Как посчитать количество элементов в массиве

  • автор:

Array.length

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015 .

Сводка

Свойство length объекта, который является экземпляром типа Array , устанавливает или возвращает число элементов этого массива. Значение данного свойства 32-битное безнаковое целое число, которое всегда численно больше чем самый наибольший индекс в массиве.

var items = ["shoes", "shirts", "socks", "sweaters"]; items.length; // возвращает 4 

Синтаксис

arr.length

Описание

Свойство length является целым числом с положительным знаком и значением, меньшим чем 2 в степени 32 (232).

var namelistA = new Array(4294967296); //2 в 32 степени = 4294967296 var namelistC = new Array(-100); //отрицательная величина console.log(namelistA.length); //RangeError: Invalid array length console.log(namelistC.length); //RangeError: Invalid array length var namelistB = []; namelistB.length = Math.pow(2, 32) - 1; //устанавливает длину массива меньше 2 в 32 степени console.log(namelistB.length); //4294967295 

В любой момент вы можете установить свойство length для обрезки массива. Когда вы расширяете массив, изменяя его свойство length , реальное количество элементов в массиве увеличивается; например, если вы установите свойство length в 3, когда оно равно 2, массив будет из 3 элементов, где значение третьего элемента будет равно undefined .

var arr = [1, 2, 3]; printEntries(arr); arr.length = 5; // устанавливает длину массива 5. printEntries(arr); function printEntries(arr)  var goNext = true; var entries = arr.entries(); while (goNext)  var result = entries.next(); if (result.done !== true)  console.log(result.value[1]); goNext = true; > else goNext = false; > console.log("=== printed == token punctuation">); > // 1 // 2 // 3 // === printed === // 1 // 2 // 3 // undefined // undefined // === printed === 

Таким образом, свойство length ничего не говорит о количестве определённых значений в массиве. Также смотрите раздел Взаимосвязь свойства length с числовыми свойствами.

Атрибуты свойства Array.length
Записываемое да
Перечисляемое нет
Настраиваемое нет

Примеры

Пример: итерирование по массиву

В следующем примере массив numbers итерируется до значения свойства length , показывающего, сколько элементов содержит массив. Значение каждого элемента удваивается.

var numbers = [1, 2, 3, 4, 5]; for (var i = 0; i  numbers.length; i++)  numbers[i] *= 2; > // Массив numbers теперь равен [2, 4, 6, 8, 10]; 

Пример: сокращение массива

Следующий пример сокращает массив statesUS до длины в 50 элементов, если текущая длина массива больше 50.

if (statesUS.length > 50)  statesUS.length = 50; > 

Спецификации

Specification
ECMAScript Language Specification
# sec-properties-of-array-instances-length

Совместимость с браузерами

BCD tables only load in the browser

Количество элементов массива + всех массивов внутри массива

Каким способом можно посчитать количество элементов [1, 2, [3, 4, [5]]], чтобы получилось семь. Другой пример: [[[[[[[[[]]]]]]]]] — должно получиться восемь. Я сегодня провёл примерно три часа, но так ничего и не добился.

function deepCount (a) < let count = 0 count = count + a.length function inside (o) < return o.length >for (i in a) < if (typeof a[i] === 'object') < count = count + inside(a[i]) >> console.log(count) > deepCount([1, 2, [3, 4, [5]]]) 

Вот всё, чего я достиг. Выдаёт шесть, но я не понимаю, как сделать рекурсию функции на саму себя, чтобы бесконечно проверяло, сколько массивов внутри.

Отслеживать
задан 17 сен 2022 в 14:02

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Можно рекурсивно. Проверять является ли элемент массива массивом и если да, то передавать этот элемент аргументом. Если нет увеличивать счетчик.

let m = [1, 2, [3, 4, [5]]]; let count = 0; function recursion(m) < for (const elem of m) < if (Array.isArray(elem)) < count++; recursion(elem); >else < count++ >> return count > console.log(recursion(m))

Отслеживать
ответ дан 17 сен 2022 в 14:19
2,500 2 2 золотых знака 7 7 серебряных знаков 17 17 бронзовых знаков
Функция recursion работает правильно один раз.
17 сен 2022 в 20:12
@StanislavVolodarskiy Затупил) Потому, что надо спать и высыпаться.
18 сен 2022 в 7:06

deepCount устроена так: в счётчик помещается длина массива. Затем перебираются элементы массива. Если какой-то из них тоже массив, к счётчику добавляется результат рекурсивного вызова deepCount :

const deepCount = a => < let c = a.length; for (const v of a) < if (Array.isArray(v)) < c += deepCount(v); >> return c; >; console.log(deepCount([1, 2, [3, 4, [5]]])); console.log(deepCount([[[[[[[[[]]]]]]]]]));

Отслеживать
ответ дан 17 сен 2022 в 20:21
Stanislav Volodarskiy Stanislav Volodarskiy
34.1k 3 3 золотых знака 20 20 серебряных знаков 56 56 бронзовых знаков

  • javascript
  • массивы
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.5.3.8609

Как посчитать количество элементов массива, имеющих определённое свойство?

0xD34F

Конечно, можно прямо посчитать количество интересующих нас элементов:

const countWithKey = (arr, key) => arr.filter(n => key in n).length; console.log(countWithKey(arr, 'ключ'));

Но можно решить задачу и в более общем виде.

Например, просуммировав данные. Функция суммирования кроме данных получает также функцию, которая из отдельного элемента данных извлекает слагаемое, в данном случае — факт наличия нужного свойства:

const sum = (data, val = n => n) => Array.prototype.reduce.call( data, (acc, n) => acc + val(n), 0 ); console.log(sum(arr, obj => obj.hasOwnProperty('ключ')));

Кстати, что даёт более общий вид.

Считать можно разные суммы. Как, например, обычных массивов из чисел ( sum([ 1, 2, 3 ]) // 6 ), так и более сложные варианты. Например, есть массив, представляющий содержимое корзины с товарами (цена, количество), надо посчитать общую стоимость:

const cart = [ < price: 100, count: 5 >, < price: 10, count: 6 >, < price: 1, count: 7 >, ]; const total = sum(cart, item => item.price * item.count); // 567

Или, считаем количество лайков за ответы на этот вопрос (можете открыть консоль и прямо там выполнить этот код):

const likes = sum(document.querySelectorAll('.btn_like .btn__counter'), n => +n.innerText);

Или, можно посчитать, сколько элементов набора данных относится к той или иной группе. Функция подсчёта помимо данных получает в качестве параметра функцию, которая принимает элемент данных, и возвращает группу, к которой он относится:

function Counter(data, key = n => n) < const counted = new Map; for (const n of data) < const k = key(n); counted.set(k, (counted.get(k) ?? 0) + 1); >return k => counted.get(k) ?? 0; > const keyExists = Counter(arr, obj => Object.hasOwn(obj, 'ключ')); console.log(keyExists(true)); // смотрим, у скольких элементов массива ключ есть console.log(keyExists(false)); // и у скольких нет

Аналогично суммированию, есть разные варианты применения.

const str = 'hello, world!!'; const chars = Counter(str); console.log(chars('h')); // 1 console.log(chars('!')); // 2 console.log(chars('x')); // 0
const persons = [ < name: 'Вася', birthday: new Date('1999-05-22') >, < name: 'Маша', birthday: new Date('2004-03-06') >, < name: 'Катя', birthday: new Date('1976-05-15') >, < name: 'Петя', birthday: new Date('1987-04-18') >, < name: 'Коля', birthday: new Date('2000-01-01') >, < name: 'Дима', birthday: new Date('2003-05-09') >, < name: 'Миша', birthday: new Date('1996-02-29') >, < name: 'Таня', birthday: new Date('1981-03-12') >, < name: 'Олег', birthday: new Date('1992-08-24') >, ]; const birthMonths = Counter( persons, (< birthday >) => birthday.toLocaleString('ru-RU', < month: 'long' >) ); console.log(birthMonths('май')); // в мае родилось три человека console.log(birthMonths('март')); // в марте два console.log(birthMonths('октябрь')); // а в октябре никто
function* naturalNumbers(n) < for (let i = 1; i > const numLengths = Counter(naturalNumbers(100), num => `$`.length); console.log(numLengths(2)); // среди первых ста натуральных чисел - девяносто двухзначных console.log(numLengths(3)); // и одно трёхзначное console.log(numLengths(0)); // число из нуля знаков? - конечно же нет таких

Как посчитать количество элементов в массиве

Страницы: 1

Количество элементов в массиве.

02.03.2011 22:11:30

Нужен совет. Как с помощью VBA определить кол-во элементов в одномерном массиве?

Прикрепленные файлы

  • post_205102.xls (29.5 КБ)

Сообщений: 61042 Регистрация: 14.09.2012

Контакты см. в профиле

02.03.2011 22:18:14

Может так?
MsgBox UBound(i) + 1

Пользователь

Сообщений: 2765 Регистрация: 22.12.2012

На лицо ужасный, добрый внутри

02.03.2011 22:25:28

Ну, вообще-то корректнее, наверное:
UBound(Arr) — LBound(Arr) + 1

С уважением, Алексей (ИМХО: Excel-2003 — THE BEST. )

02.03.2011 22:26:53

Вот чем Гуру отличается от обычного Usera.
Огромное спасибо!

02.03.2011 22:28:02

Конечно же спасибо обоим!

Страницы: 1

Читают тему

© Николай Павлов, Planetaexcel, 2006-2023
info@planetaexcel.ru

Использование любых материалов сайта допускается строго с указанием прямой ссылки на источник, упоминанием названия сайта, имени автора и неизменности исходного текста и иллюстраций.

ООО «Планета Эксел»
ИНН 7735603520
ОГРН 1147746834949
ИП Павлов Николай Владимирович
ИНН 633015842586
ОГРНИП 310633031600071

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *