我在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;
答案 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