JavaScript | Как отобрать все строки в массиве?

JavaScript | Как отобрать все строки в массиве?

Как получить все элементы со строковыми значениями из массива?

У нас есть массив со смешанными типами данных:

var massiv = [ {'ff':'ff'}, 123, [],  "stroka1", [456], "stroka3", {'dd':'rr'}, "stroka2", 567, "stroka5", 183, "stroka6", true, false, "stroka4"]

Нам нужно вытащить из этого массива только строковые элементы. Как это сделать?

Воспользуемся методом filter() и в качестве условия будем использовать свойство конструктора, в котором был создан каждый элемент массива. Если элемент был создан конструктором класса String, то мы закидываем его в новый массив. Если нет, то проходим мимо.

Условие такое:

i.constructor.name == "String"

Любой элемент массива будет принадлежать какому-то классу. По другому быть не может. Любой класс имеет свой собственный конструктор, поэтому у любого элемента массива можно получить название класса.

massiv.filter(i => i.constructor.name == "String")
Фильтруем массив на строки - JavaScript
Фильтруем массив на строки — JavaScript

После такой фильтрации мы получим только строковые значения в новом массиве. Любые числа, массивы, объекты, булевы и т.п. будут отброшены.

Мы выполнили задачу и отобрали все строки в массиве!

 

Информационные ссылки

JavaScript | Строки (String)

Стандарт 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