2017-09-14 2 views
1

J'ai un tableau d'objets complexes et les tableaux en javascript tels que:Comment vérifier si le tableau a imbriqué propriété avec valeur définie

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

Je dois savoir s'il y a une propriété avec valeur définie dans mon tableau , tels que:

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

C'est, pour mon tableau source le résultat de ceci:

var result = certains (tableau, "booleanProp", true) - doit être vrai.

J'ai essayé d'utiliser la fonction lodash _.some(), mais elle retourne false pour mon tableau, il semble que _.some() ne trouve pas les propriétés profondément imbriquées.

Il serait très cool si la fonction peut prendre en charge un objet compliqué en tant que source, et pas seulement en réseau.

J'apprécierais toute aide, merci.

+0

Je n'ai pas you.Can vous clarifiez s'il vous plaît? – Debabrata

+0

Debabrata, je veux savoir si le tableau source a une propriété définie (paire clé/valeur) comme lodash _.some() - la fonction, mais pour la propriété imbriquée comme je l'ai montré avant –

Répondre

1

Vous pouvez utiliser une approche itérative et récursive en vérifiant l'objet réel et si la valeur est un objet, itérez les clés de l'objet.

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

Nina Scholz, ça marche! Merci beaucoup! Je suis désolé que je ne puisse pas voter votre réponse (réputation insuffisante) –