我正在尝试过滤这样的数组:
array.filter(e => { return e })
有了这个,我想过滤所有空字符串,包括undefined
和null
。
不幸的是我的数组有一些数组,不应该存在。所以我还需要只检查字符串值并删除所有其他值。
我该怎么做?
答案 0 :(得分:4)
您可以在过滤器方法中检查字符串并清空它们:
array.filter(e => (typeof e === 'string') && !!e)
注意:如果元素为!!e
,false
,null
或0,则undefined
会返回''
。
我应该提到" arrow" -function语法仅适用于支持ES6或更高版本的浏览器。
替代方案是:
array.filter(function(e) {
return (typeof e === 'string') && !!e;
});
注意:请注意,Array.prototype.filter
在旧版浏览器中不存在。
答案 1 :(得分:2)
您可以使用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 !== '')
)
答案 2 :(得分:1)
> [1,...,3日,5] .filter(字符串)
[1,3,5]
答案 3 :(得分:0)
当在es6中返回由一行作为回调组成的方法时,不需要return
,因为这会隐式发生。
希望这会有所帮助: - )
let arr = ["", "", "fdsff", [], null, {}, undefined];
let filteredArr = arr.filter(item => (typeof item === "string" && !item) || !item)
console.log(filteredArr)
答案 4 :(得分:0)
const justStrings = array.filter(element =>
(typeof element === 'string' || element instanceof String)
&& element
)
要确保您的元素是string
,您必须检查它不是变量类型(let str = 'hello'
)或 String < / em>(new String('hello')
)因为此案例会object
返回typeof element
。
此外,您必须检查您的元素是否存在。