javascript - find specific property inside array of object -
i use following code , want find if path equal key try following loops without success,what doing wrong here?
i need find if key exist
https://jsfiddle.net/0ukl2jxh/
var obj = { "prov": [{ "save": { "key": "aaa", "method": "sa" }, "delete": { "key": "bbb", "method": "del" } }] }; var obj2 = { "prov": [{ "save": { "key": "ccc", "method": "sa" }, "delete": { "key": "ccc", "method": "del" } }] }; var myarray = []; myarray.push(obj); myarray.push(obj2); (var = 0; < myarray.length; i++) { var configobj = configs[i]; (var j = 0; configobj; j++) { var prov = configobj[j]; (var x = 0; prov; x++) { var obj = prov[x]; (var y = 0; obj; y++) { if (obj.key === 'aaa') exit; } } } } }
what mapping array objects keys (extracting keys objects), doing simple array search given element ?
var keys = myarray.map(function(e, i){ return e.prov[0].save.key; }); // keys = ["aaa", "ccc"] // give index of element, -1 if not exist var index = keys.indexof("ccc"); in example, do
if (index > -1) exit; // although not recognize such javascript statement :-) update:
well, after additional explanations side, problem became clearer.
i think need:
function f(array, keyname, keyvalue) { function findkey(obj) { var keyfound = false; for(var property in obj) { if (property == keyname && obj[property] == keyvalue) { return true; } else if(typeof(obj[property]) == "object") { keyfound = findkey(obj[property], property); if (keyfound) return keyfound; } else { if (obj == keyvalue) keyfound = true; } } return keyfound; } var keyfound = false; (var = 0; < array.length; i++) { keyfound = findkey(array[i]); if (keyfound) break; } return keyfound; } //usage: //f(myarray, "delete", "method") -> false //f(myarray, "keydasd", "aaa") -> false //f(myarray, "key", "aaa") -> true //f(myarray, "method", "del") -> true function 'f' parameters:
obj => array containing objects
keyname => name of key search matching value
keyvalue => value of key...
just record: learned make generic solution problem, creating function like
function f(obj, objpath, keyvalue) where objpath can whatever path key want search matching value, in form of string. using eval, can access obj's matching value
eval (obj[objpath]) here's example of such thing:
var o = { a: 1, b: { c: [ { x: "xxx", y: 1205 }, { x: 1020, y: 8274 } ], d: 1000 } } var p1 = "o.b" var p2 = ".c[0].x" eval(p1 + p2) //result: "xxx"
Comments
Post a Comment