如何检查是否数组有定义的值嵌套属性(How to check if array has nested

2019-09-26 13:16发布

我有复杂对象和数组在javascript如数组:

var array = [
    { "simpleProp": "some value" },
    { "booleanProp": false },
    {
        "arrayProp": [
            { "prop1": "value1" },
            {
                "prop2": {
                    "prop22": "value22",
                    "prop23": "value23"
                } 
            },
            { "prop3": "value3" },
            { "booleanProp": true }
        ]
    }
];

我知道,如果有一个在我的数组定义的值,如属性:

   function some(array, property, value) {
        //some logic here
       // return boolean
    };

也就是说,对于我的源阵列这样的结果:

VAR结果=一些(阵列 “booleanProp”,真) - 必须是TRUE。

我试图用lodash功能_.some(),但它返回我的阵列假,看来_.some()无法找到深层嵌套的属性。

这将是非常凉爽如果功能可以支持复杂的对象作为源,不仅阵列。

我想感谢所有帮助,谢谢。

Answer 1:

你可以通过检查实际的对象使用迭代和递归方法,如果该值是一个对象迭代对象的关键。

 function some(object, property, value) { return object[property] === value || Object.keys(object).some(function (k) { return object[k] && typeof object[k] === 'object' && some(object[k], property, value); }); } var data = [{ simpleProp: "some value" }, { booleanProp: false }, { arrayProp: [{ prop1: "value1" }, { prop2: { prop22: "value22", prop23: "value23" } }, { prop3: "value3" }, { booleanProp: true }] }]; console.log(some(data, 'booleanProp', true)); // true console.log(some(data, 'foo', 42)); // false 



文章来源: How to check if array has nested property with defined value