如何使用javascript过滤功能

时间:2014-08-14 21:31:22

标签: javascript

我在chrome控制台中运行下面的代码。我想filterArr包含3个对象但是我将空{}作为第四个。我们的想法是通过flags数组进行过滤,并使用key == true返回对象(或=== true - 不确定哪一个有效)并且true键的值附加到filteredArr。任何帮助表示赞赏!

var flags = [ { usa: ["red", "white", "blue"] }, null, { germany: ["red", "yellow", "black"] }, {}, { jamaica: ["green", "yellow", "black"] }, "", undefined];

var filteredArr = flags.filter(function(val) {

    return !(val === "" || typeof val == "undefined" || val === null || typeof val == "null");
});

filteredArr;

2 个答案:

答案 0 :(得分:2)

首先,如果您想过滤虚假位,请在Boolean

上进行过滤
var filteredArr = flags.filter(Boolean)

与您的代码产生相同的结果,但更优雅。现在,如果要过滤没有可枚举键的对象,可以使用Object.keys:

var filteredArr = flags.filter(Boolean).
                        filter(function(el){ return Object.keys(el).length })

可替换地:

var filteredArr = flags.map(Object).
                        filter(function(x){ return Object.keys(x).length })

或者,扁平化为单个过滤器:

var filtered =  flags.filter(function(x){ return Object.keys(Object(x)).length })

答案 1 :(得分:0)

空对象不为空。您需要通过以下方式检查对象是否为空:

Object.keys(obj).length === 0