JS:仅针对非空和字符串值类型过滤数组

时间:2017-08-01 15:36:41

标签: javascript arrays

我正在尝试过滤这样的数组:

array.filter(e => { return e })

有了这个,我想过滤所有空字符串,包括undefinednull。 不幸的是我的数组有一些数组,不应该存在。所以我还需要只检查字符串值并删除所有其他值。

我该怎么做?

5 个答案:

答案 0 :(得分:4)

您可以在过滤器方法中检查字符串并清空它们:

array.filter(e => (typeof e === 'string') && !!e)

注意:如果元素为!!efalsenull或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

此外,您必须检查您的元素是否存在。