2017-09-14 34 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,它的工作原理!非常感謝你!對不起,我不能投票答覆(名譽不足) –