Как узнать какое количество строк находится в массиве?
Когда мы говорим о массиве, то мы работаем с элементами и их индексами. В данном случае предполагается, что элементами массива являются строковые значения.
То есть по сути нам нужно узнать сколько элементов находится в массиве. Как это сделать?
Пусть у нас будет массив:
var massiv = ["stroka1","stroka6","stroka3","stroka31","stroka600","stroka43434"]
Чтобы узнать сколько строк находится в этом массиве, нужно просто написать называние массива, затем поставить точку, затем написать слово «length«:
massiv.length
Вывод в консоль браузера:
Если в массиве присутствуют смешанные данные?
var massiv = [ {'ff':'ff'}, 123, [], "stroka1", [456], "stroka3", {'dd':'rr'}, "stroka2", 567, "stroka5", 183, "stroka6", true, false, "stroka4"]
Как узнать количество строковых данных в смешанном массиве?
Эту задачу нужно разделить на два этапа:
- Сначала фильтруем массив по типу данных String
- Потом считаем количество элементов после фильтрации
Фильтруем
Мы используем свойство конструктора, в котором был создан каждый элемент массива. Если элемент был создан конструктором класса String, то мы закидываем его в новый массив. Если нет, то проходим мимо.
Любой элемент массива будет принадлежать какому-то классу. По другому быть не может. Любой класс имеет свой собственный конструктор, поэтому у любого элемента массива можно получить название класса.
massiv.filter(i => i.constructor.name == "String")
После такой фильтрации мы получим только строковые значения. Любые числа, массивы, объекты, булевы и т.п. будут отброшены.
Считаем
massiv.filter(i => i.constructor.name == "String").length
Фильтр возвращает нам новый массив, в котором нужно просто получить значение свойства «length«.
В нашем случае получится число 6. То есть из исходного массива мы извлекли 6 строковых элементов.
Информационные ссылки
Стандарт ECMAScript — Раздел «22.1 String Objects» — https://tc39.es/ecma262/#sec-string-objects
Стандарт ECMAScript — Раздел «23.1.3.7 Array.prototype.filter ( callbackfn [ , thisArg ] )» — https://tc39.es/ecma262/#sec-array.prototype.filter