Я пытаюсь отфильтровать массив следующим образом:
array.filter(e => { return e })
С этим я хочу отфильтровать все пустые строки, включая undefined
и null
. К сожалению, в моем массиве есть несколько массивов, которых не должно быть. Поэтому мне нужно также проверить только значения строк и удалить все остальные.
Как я могу это сделать?
Вы можете проверить тип элементов с помощью typeof
:
array.filter(e => typeof e === 'string' && e !== '')
Поскольку ''
является ложным, вы можете упростить, просто проверив, если e
был правдивым, хотя приведенное выше является более явным
array.filter(e => typeof e === 'string' && e)
const array = [null, undefined, '', 'hello', '', 'world', 7, ['some', 'array'], null]
console.log(
array.filter(e => typeof e === 'string' && e !== '')
)
Вы можете проверить строку и удалить оба метода фильтра:
array.filter(e => (typeof e === 'string') && !!e)
Примечание !!e
возвращает false
если элемент имеет значение null
, undefined
, ''
или 0.
Следует отметить, что синтаксис "стрелка" -function работает только в браузерах, поддерживающих ES6 или выше.
Альтернативой является:
array.filter(function(e) {
return (typeof e === 'string') && !!e;
});
Примечание. Имейте в виду, что Array.prototype.filter
не существует в старых браузерах.
> [1, 3, 5].filter (строка)
[1,3,5]
const justStrings = array.filter(element =>
(typeof element === 'string' || element instanceof String)
&& element
)
Чтобы быть shure, ваш элемент является string
вы должны проверить, что это не тип переменной (let str = 'hello'
) или экземпляр String (new String('hello')
), потому что этот случай возвращает object
по typeof element
.
Кроме того, вы должны проверить, существует ли ваш элемент.
При возврате метода, который состоит из одной строки в качестве обратного вызова в es6, нет необходимости в return
поскольку это происходит неявно.
Надеюсь это поможет :-)
let arr = ["", "", "fdsff", [], null, {}, undefined];
let filteredArr = arr.filter(item => (typeof item === "string" && !item) || !item)
console.log(filteredArr)
typeof e === 'string' && e
может возвращать строку и не всегда логическое значение, как того требует определение обратного вызова фильтра.