使用原始JavaScript或underscore.js基于布尔值删除或过滤对象

时间:2014-10-09 08:18:50

标签: javascript underscore.js

我有一个JavaScript对象,其中包含2个具有不同true / false布尔值的对象,并希望过滤掉第一个对象,因为它具有所有错误值。

如果在任何情况下,任何键都为真,那么它应该保留,并且不应该过滤掉数据对象。

我希望仅根据任何真值保留第二个对象,因为您可以看到它具有一些“真实”值。

让我进一步解释一下,因为你可以看到'data'的第一个对象,其所有布尔值都为'false',应该省略,而end result应该只有第二个数据对象,因为它是一些'true'值

"data": [{
                                "Products": "Mobile",
                                "Australia": false,
                                "Austria": false,
                                "Belgium": false,
                                "Canada": false,
                                "China": false,
                                "India": false,
                                "Poland": false,
                                "Brazil": false,
                                "US": false
                            }, 
                            {
                                "Products": "Tablet",
                                "Australia": false,
                                "Austria": true,
                                "Belgium": false,
                                "Canada": false,
                                "China": false,
                                "India": true,
                                "Poland": false,
                                "Brazil": true,
                                "US": false
                            }]

最终结果应该只是这样,它应该因为所有错误值而过滤第一个对象。

"data": [{
                                "Products": "Tablet",
                                "Australia": false,
                                "Austria": true,
                                "Belgium": false,
                                "Canada": false,
                                "China": false,
                                "India": true,
                                "Poland": false,
                                "Brazil": true,
                                "US": false
                            }]

欢迎使用原始JavaScript或Underscore.js的任何建议。

2 个答案:

答案 0 :(得分:4)

使用filtersome

data.filter(                             // Filter the data array by
  function(product) {                    // looking at each product in it
    return Object.keys(product)          // and for that product's keys
      .some(                             // see if any of the 
        function(key) {                  // keys
          return product[key] === true;  // have a value of true
        }
      )
    ;
  }
)

答案 1 :(得分:1)

使用下划线的版本:

    var result = _.filter(data, function(product){
        return _.some(product, function(value){
            return _.isBoolean(value) && value;
        });
    });