2017-09-14 33 views
1

如果数组有嵌套财产我有复杂的对象和数组在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 
    }; 

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

变种结果=一些(阵列 “booleanProp”,真) - 必须是TRUE。我试图使用lodash函数_.some(),但它返回false为我的数组,它似乎_.some()找不到深层嵌套的属性。

这将是非常酷,如果该函数可能支持复杂的对象作为源,而不是数组。

我会感谢任何帮助,谢谢。

+0

you.Can你澄清,请我没有得到什么? – Debabrata

+0

Debabrata,我想知道如果源数组定义属性(键/值对)像lodash _.some() - 函数,但嵌套属性,因为我之前展示 –

回答

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

+0

尼娜Scholz,它的工作原理!非常感谢你!对不起,我不能投票答复(名誉不足) –