如何检查数组是否具有具有定义值的嵌套属性 [英] How to check if array has nested property with defined value

查看:79
本文介绍了如何检查数组是否具有具有定义值的嵌套属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在javascript中有一个复杂的对象数组和数组,例如:

I have an array of complicated objects and arrays in javascript such as:

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

我必须知道数组中是否存在具有定义值的属性,例如:

I have to know if there is a property with defined value in my array, such as:

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

也就是说,对于我的源数组,其结果是:

That is, for my source array the result of this:

var result = some(array,"booleanProp",true) -必须为TRUE.

var result = some(array, "booleanProp", true) - must be TRUE.

我尝试使用lodash函数_.some(),但是它为我的数组返回false,看来_.some()找不到深层嵌套的属性.

I tried to use lodash function _.some(), but it returns false for my array, it appears _.some() can't find deeply nested properties.

如果函数可以支持复杂对象作为源,而不仅仅是数组,那将非常酷.

It would be very cool if the function may support complicated object as source, not only array.

非常感谢您的帮助.

推荐答案

您可以使用迭代和递归方法,方法是检查实际对象,如果该值是对象,则对对象的键进行迭代.

You could use an iterative and recursive approach by checking the actual object and if the value is an object iterate the object's keys.

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

这篇关于如何检查数组是否具有具有定义值的嵌套属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆