我正在chrome的控制台中运行以下代码。我希望filteredArr包含3个对象,但是我将空{}作为第四个对象。这个想法是通过flags数组过滤并返回键== 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;
首先,如果要过滤伪造的位,请在上进行过滤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 })
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句