在lodash中检查属性值

时间:2017-02-01 17:56:48

标签: javascript lodash

鉴于以下内容

var content = [{
        "set_archived": false,
        "something": [{
            "id": "aa7bb3db-19a2-4ef6-5944-892edaaf53c3",
            "modified": "2016-12-01T18:23:29.743333Z",
            "created": "2016-12-01T18:23:29.743333Z",
            "archived": false
        }]
    },
    {
        "set_archived": true,
        "something": [{
            "id": "aa7bb3db-19a2-4ef6-5944-892edaaf53c3",
            "modified": "2017-01-30T19:42:29.743333Z",
            "created": "2017-01-30T19:42:29.743333Z",
            "archived": false
        }]
    }
];

使用Lodash,我如何确定对象数组中的set_archivedsomething.archived是否等于true?

因此,在这种情况下,因为第二个对象的set_is_archived为真,所以预期的响应应该为真。如果任一对象中的所有项都为false,则响应应为false。

4 个答案:

答案 0 :(得分:2)

只需使用:

_.filter(content, o => o["set_archived"] || o.something[0].archived).length > 0;

_.some(content, o => o["set_archived"] || o.something[0].archived);

PlainJs:

content.some(o => o["set_archived"] || o.something[0].archived)

 content.filter(o => o["set_archived"] || o.something[0].archived).length > 0;

答案 1 :(得分:1)

您可以在普通的javascript中使用some()

var content = [{
  "set_archived": false,
  "something": [{
    "id": "aa7bb3db-19a2-4ef6-5944-892edaaf53c3",
    "modified": "2016-12-01T18:23:29.743333Z",
    "created": "2016-12-01T18:23:29.743333Z",
    "archived": false
  }]
}, {
  "set_archived": true,
  "something": [{
    "id": "aa7bb3db-19a2-4ef6-5944-892edaaf53c3",
    "modified": "2017-01-30T19:42:29.743333Z",
    "created": "2017-01-30T19:42:29.743333Z",
    "archived": false
  }]
}];

var result = content.some(function(e) {
  return e.set_archived === true || e.something[0].archived === true
})
console.log(result)

答案 2 :(得分:0)

你不需要为此付出代价。您可以使用filter

使用纯JS执行此操作
content.filter(i => i.set_archived || i.something.archied)

答案 3 :(得分:0)

考虑与问题中的对象相同的对象,有几种方法可以找到问题配合的解决方案。

var flag = false;
flag = content.some(function(c){
    if(c["set_archived"]){
    return true;
  }
});

console.log(flag)

    var flag = false;
    flag = content.some(function(c){
        if(c["set_archived"] || c.something[0].archived){
        return true;
      }
    });

    console.log(flag)

如果数组的至少一个对象具有[" set_archived"]属性为true,则上面的代码段将为true,如果数组的所有对象都有[" set_archived& #34;]为假。 (我可以反过来说)

some()方法测试数组中的某个元素是否通过了由提供的函数实现的测试。

every()方法测试数组中的所有元素是否都通过了提供的函数实现的测试。

如果你正在寻找一种更严格的方法,我会重新审视每一个()。