Finding a key in json
I have the following json:
let object = {
"statusCode": 200,
"body": [{
"id": "3",
"externalId": "billgates",
"status": "active",
"createdAt": "2018-11-14T08:36:50.967Z",
"updatedAt": "2018-11-14T08:36:50.967Z",
"firstName": "yehu",
"lastName": "da",
"email": "bg@g.com"
}
],
"headers": {
"x-powered-by": "Express",
"access-control-allow-origin": "*",
"content-type": "application/json; charset=utf-8",
"content-length": "189",
"etag": "W/"bd-Emx3/KChQLzf9+6bgFSHXPQgDTM"",
"date": "<<Masked>>",
"connection": "close"
},
"request": {
"uri": {
"protocol": "http:",
"slashes": true,
"auth": null,
"host": "mysite",
"port": "4202",
"hostname": "mysite",
"hash": null,
"search": "?username=billgates",
"query": "username=billgates",
"pathname": "/v1/users",
"path": "/v1/users?username=billgates",
"href": "http://mysite"
},
"method": "GET",
"headers": {
"Content-Type": "application/json",
"accept": "application/json",
"content-length": 2
}
}
}
i wrote a function that gets a key and a value and if key with that value found in json returns true otherwise false, here is the function:
let key = "externalId";
let value = "bilgates"
let findValue = function findValue(obj, key, value) {
for(let localKey in obj){
if(obj.hasOwnProperty(localKey)){
if(localKey === key){
res = obj[localKey] === value;
return res;
}
else{
let val = obj[localKey];
findValue(val, key, value);
}
}
}
}
let res = findValue(object, key, value)
console.log(res);
after running the function in VS Code (node.js) I get the following error:
RangeError: Maximum call stack size exceeded
after debugging the function, I could not found the problem. It seems that after some point, localKey will be always zero and obj[localKey] will be always 3.
javascript node.js json recursion
add a comment |
I have the following json:
let object = {
"statusCode": 200,
"body": [{
"id": "3",
"externalId": "billgates",
"status": "active",
"createdAt": "2018-11-14T08:36:50.967Z",
"updatedAt": "2018-11-14T08:36:50.967Z",
"firstName": "yehu",
"lastName": "da",
"email": "bg@g.com"
}
],
"headers": {
"x-powered-by": "Express",
"access-control-allow-origin": "*",
"content-type": "application/json; charset=utf-8",
"content-length": "189",
"etag": "W/"bd-Emx3/KChQLzf9+6bgFSHXPQgDTM"",
"date": "<<Masked>>",
"connection": "close"
},
"request": {
"uri": {
"protocol": "http:",
"slashes": true,
"auth": null,
"host": "mysite",
"port": "4202",
"hostname": "mysite",
"hash": null,
"search": "?username=billgates",
"query": "username=billgates",
"pathname": "/v1/users",
"path": "/v1/users?username=billgates",
"href": "http://mysite"
},
"method": "GET",
"headers": {
"Content-Type": "application/json",
"accept": "application/json",
"content-length": 2
}
}
}
i wrote a function that gets a key and a value and if key with that value found in json returns true otherwise false, here is the function:
let key = "externalId";
let value = "bilgates"
let findValue = function findValue(obj, key, value) {
for(let localKey in obj){
if(obj.hasOwnProperty(localKey)){
if(localKey === key){
res = obj[localKey] === value;
return res;
}
else{
let val = obj[localKey];
findValue(val, key, value);
}
}
}
}
let res = findValue(object, key, value)
console.log(res);
after running the function in VS Code (node.js) I get the following error:
RangeError: Maximum call stack size exceeded
after debugging the function, I could not found the problem. It seems that after some point, localKey will be always zero and obj[localKey] will be always 3.
javascript node.js json recursion
2
hint ... it's"id": "3",
that is causing the problem (you need to check ifobj[localKey]
is an actual OBJECT before recursing ...you'll also need to recurse PROPERLY - because unless the key is found in the top level, you'll always get undefined once you fix your infinite recursion
– Bravo
Nov 15 '18 at 9:45
Note that if you're dealing with a plain object without a meaningful internal prototype, thehasOwnProperty
check is superfluous. (or just useObject.keys
/entries
instead, which only iterate over properties directly on the object)
– CertainPerformance
Nov 15 '18 at 9:49
1
quickest fix for your code pastebin.com/8YQb4mQ3 - but I wouldn't do it this way at all
– Bravo
Nov 15 '18 at 9:52
@Bravo why you wouldn't do it this way. whats wrong with it?
– Limbo
Nov 15 '18 at 10:09
to be honest, I don't know why I said that :p I quickly tried other ways and realised the error of that part of the statement :
– Bravo
Nov 15 '18 at 10:10
add a comment |
I have the following json:
let object = {
"statusCode": 200,
"body": [{
"id": "3",
"externalId": "billgates",
"status": "active",
"createdAt": "2018-11-14T08:36:50.967Z",
"updatedAt": "2018-11-14T08:36:50.967Z",
"firstName": "yehu",
"lastName": "da",
"email": "bg@g.com"
}
],
"headers": {
"x-powered-by": "Express",
"access-control-allow-origin": "*",
"content-type": "application/json; charset=utf-8",
"content-length": "189",
"etag": "W/"bd-Emx3/KChQLzf9+6bgFSHXPQgDTM"",
"date": "<<Masked>>",
"connection": "close"
},
"request": {
"uri": {
"protocol": "http:",
"slashes": true,
"auth": null,
"host": "mysite",
"port": "4202",
"hostname": "mysite",
"hash": null,
"search": "?username=billgates",
"query": "username=billgates",
"pathname": "/v1/users",
"path": "/v1/users?username=billgates",
"href": "http://mysite"
},
"method": "GET",
"headers": {
"Content-Type": "application/json",
"accept": "application/json",
"content-length": 2
}
}
}
i wrote a function that gets a key and a value and if key with that value found in json returns true otherwise false, here is the function:
let key = "externalId";
let value = "bilgates"
let findValue = function findValue(obj, key, value) {
for(let localKey in obj){
if(obj.hasOwnProperty(localKey)){
if(localKey === key){
res = obj[localKey] === value;
return res;
}
else{
let val = obj[localKey];
findValue(val, key, value);
}
}
}
}
let res = findValue(object, key, value)
console.log(res);
after running the function in VS Code (node.js) I get the following error:
RangeError: Maximum call stack size exceeded
after debugging the function, I could not found the problem. It seems that after some point, localKey will be always zero and obj[localKey] will be always 3.
javascript node.js json recursion
I have the following json:
let object = {
"statusCode": 200,
"body": [{
"id": "3",
"externalId": "billgates",
"status": "active",
"createdAt": "2018-11-14T08:36:50.967Z",
"updatedAt": "2018-11-14T08:36:50.967Z",
"firstName": "yehu",
"lastName": "da",
"email": "bg@g.com"
}
],
"headers": {
"x-powered-by": "Express",
"access-control-allow-origin": "*",
"content-type": "application/json; charset=utf-8",
"content-length": "189",
"etag": "W/"bd-Emx3/KChQLzf9+6bgFSHXPQgDTM"",
"date": "<<Masked>>",
"connection": "close"
},
"request": {
"uri": {
"protocol": "http:",
"slashes": true,
"auth": null,
"host": "mysite",
"port": "4202",
"hostname": "mysite",
"hash": null,
"search": "?username=billgates",
"query": "username=billgates",
"pathname": "/v1/users",
"path": "/v1/users?username=billgates",
"href": "http://mysite"
},
"method": "GET",
"headers": {
"Content-Type": "application/json",
"accept": "application/json",
"content-length": 2
}
}
}
i wrote a function that gets a key and a value and if key with that value found in json returns true otherwise false, here is the function:
let key = "externalId";
let value = "bilgates"
let findValue = function findValue(obj, key, value) {
for(let localKey in obj){
if(obj.hasOwnProperty(localKey)){
if(localKey === key){
res = obj[localKey] === value;
return res;
}
else{
let val = obj[localKey];
findValue(val, key, value);
}
}
}
}
let res = findValue(object, key, value)
console.log(res);
after running the function in VS Code (node.js) I get the following error:
RangeError: Maximum call stack size exceeded
after debugging the function, I could not found the problem. It seems that after some point, localKey will be always zero and obj[localKey] will be always 3.
javascript node.js json recursion
javascript node.js json recursion
asked Nov 15 '18 at 9:40
LimboLimbo
131112
131112
2
hint ... it's"id": "3",
that is causing the problem (you need to check ifobj[localKey]
is an actual OBJECT before recursing ...you'll also need to recurse PROPERLY - because unless the key is found in the top level, you'll always get undefined once you fix your infinite recursion
– Bravo
Nov 15 '18 at 9:45
Note that if you're dealing with a plain object without a meaningful internal prototype, thehasOwnProperty
check is superfluous. (or just useObject.keys
/entries
instead, which only iterate over properties directly on the object)
– CertainPerformance
Nov 15 '18 at 9:49
1
quickest fix for your code pastebin.com/8YQb4mQ3 - but I wouldn't do it this way at all
– Bravo
Nov 15 '18 at 9:52
@Bravo why you wouldn't do it this way. whats wrong with it?
– Limbo
Nov 15 '18 at 10:09
to be honest, I don't know why I said that :p I quickly tried other ways and realised the error of that part of the statement :
– Bravo
Nov 15 '18 at 10:10
add a comment |
2
hint ... it's"id": "3",
that is causing the problem (you need to check ifobj[localKey]
is an actual OBJECT before recursing ...you'll also need to recurse PROPERLY - because unless the key is found in the top level, you'll always get undefined once you fix your infinite recursion
– Bravo
Nov 15 '18 at 9:45
Note that if you're dealing with a plain object without a meaningful internal prototype, thehasOwnProperty
check is superfluous. (or just useObject.keys
/entries
instead, which only iterate over properties directly on the object)
– CertainPerformance
Nov 15 '18 at 9:49
1
quickest fix for your code pastebin.com/8YQb4mQ3 - but I wouldn't do it this way at all
– Bravo
Nov 15 '18 at 9:52
@Bravo why you wouldn't do it this way. whats wrong with it?
– Limbo
Nov 15 '18 at 10:09
to be honest, I don't know why I said that :p I quickly tried other ways and realised the error of that part of the statement :
– Bravo
Nov 15 '18 at 10:10
2
2
hint ... it's
"id": "3",
that is causing the problem (you need to check if obj[localKey]
is an actual OBJECT before recursing ...you'll also need to recurse PROPERLY - because unless the key is found in the top level, you'll always get undefined once you fix your infinite recursion– Bravo
Nov 15 '18 at 9:45
hint ... it's
"id": "3",
that is causing the problem (you need to check if obj[localKey]
is an actual OBJECT before recursing ...you'll also need to recurse PROPERLY - because unless the key is found in the top level, you'll always get undefined once you fix your infinite recursion– Bravo
Nov 15 '18 at 9:45
Note that if you're dealing with a plain object without a meaningful internal prototype, the
hasOwnProperty
check is superfluous. (or just use Object.keys
/entries
instead, which only iterate over properties directly on the object)– CertainPerformance
Nov 15 '18 at 9:49
Note that if you're dealing with a plain object without a meaningful internal prototype, the
hasOwnProperty
check is superfluous. (or just use Object.keys
/entries
instead, which only iterate over properties directly on the object)– CertainPerformance
Nov 15 '18 at 9:49
1
1
quickest fix for your code pastebin.com/8YQb4mQ3 - but I wouldn't do it this way at all
– Bravo
Nov 15 '18 at 9:52
quickest fix for your code pastebin.com/8YQb4mQ3 - but I wouldn't do it this way at all
– Bravo
Nov 15 '18 at 9:52
@Bravo why you wouldn't do it this way. whats wrong with it?
– Limbo
Nov 15 '18 at 10:09
@Bravo why you wouldn't do it this way. whats wrong with it?
– Limbo
Nov 15 '18 at 10:09
to be honest, I don't know why I said that :p I quickly tried other ways and realised the error of that part of the statement :
– Bravo
Nov 15 '18 at 10:10
to be honest, I don't know why I said that :p I quickly tried other ways and realised the error of that part of the statement :
– Bravo
Nov 15 '18 at 10:10
add a comment |
1 Answer
1
active
oldest
votes
Though a different solution, still you can try below approach
let object = {
"statusCode": 200,
"body": [{
"id": "3",
"externalId": "billgates",
"status": "active",
"createdAt": "2018-11-14T08:36:50.967Z",
"updatedAt": "2018-11-14T08:36:50.967Z",
"firstName": "yehu",
"lastName": "da",
"email": "bg@g.com"
}
],
"headers": {
"x-powered-by": "Express",
"access-control-allow-origin": "*",
"content-type": "application/json; charset=utf-8",
"content-length": "189",
"etag": "W/"bd-Emx3/KChQLzf9+6bgFSHXPQgDTM"",
"date": "<<Masked>>",
"connection": "close"
},
"request": {
"uri": {
"protocol": "http:",
"slashes": true,
"auth": null,
"host": "mysite",
"port": "4202",
"hostname": "mysite",
"hash": null,
"search": "?username=billgates",
"query": "username=billgates",
"pathname": "/v1/users",
"path": "/v1/users?username=billgates",
"href": "http://mysite"
},
"method": "GET",
"headers": {
"Content-Type": "application/json",
"accept": "application/json",
"content-length": 2
}
}
}
function findValue(obj, k, v) {
let res = false
if(!obj || typeof obj != "object") return false
if (obj[k] == v) return true
else {
for (let [key, value] of Object.entries(obj)) {
if(Array.isArray(value)) { res = res || value.some(d => findValue(d, k, v)) }
if(typeof value == "object") { res = res || findValue(value, k, v) }
}
}
return res
}
console.log(findValue(object, 'externalId', 'billgates'))
console.log(findValue(object, 'lastName', 'da'))
console.log(findValue(object, 'x-powered-by', 'Express'))
console.log(findValue(object, 'externalId', 'Nitish'))
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53316447%2ffinding-a-key-in-json%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Though a different solution, still you can try below approach
let object = {
"statusCode": 200,
"body": [{
"id": "3",
"externalId": "billgates",
"status": "active",
"createdAt": "2018-11-14T08:36:50.967Z",
"updatedAt": "2018-11-14T08:36:50.967Z",
"firstName": "yehu",
"lastName": "da",
"email": "bg@g.com"
}
],
"headers": {
"x-powered-by": "Express",
"access-control-allow-origin": "*",
"content-type": "application/json; charset=utf-8",
"content-length": "189",
"etag": "W/"bd-Emx3/KChQLzf9+6bgFSHXPQgDTM"",
"date": "<<Masked>>",
"connection": "close"
},
"request": {
"uri": {
"protocol": "http:",
"slashes": true,
"auth": null,
"host": "mysite",
"port": "4202",
"hostname": "mysite",
"hash": null,
"search": "?username=billgates",
"query": "username=billgates",
"pathname": "/v1/users",
"path": "/v1/users?username=billgates",
"href": "http://mysite"
},
"method": "GET",
"headers": {
"Content-Type": "application/json",
"accept": "application/json",
"content-length": 2
}
}
}
function findValue(obj, k, v) {
let res = false
if(!obj || typeof obj != "object") return false
if (obj[k] == v) return true
else {
for (let [key, value] of Object.entries(obj)) {
if(Array.isArray(value)) { res = res || value.some(d => findValue(d, k, v)) }
if(typeof value == "object") { res = res || findValue(value, k, v) }
}
}
return res
}
console.log(findValue(object, 'externalId', 'billgates'))
console.log(findValue(object, 'lastName', 'da'))
console.log(findValue(object, 'x-powered-by', 'Express'))
console.log(findValue(object, 'externalId', 'Nitish'))
add a comment |
Though a different solution, still you can try below approach
let object = {
"statusCode": 200,
"body": [{
"id": "3",
"externalId": "billgates",
"status": "active",
"createdAt": "2018-11-14T08:36:50.967Z",
"updatedAt": "2018-11-14T08:36:50.967Z",
"firstName": "yehu",
"lastName": "da",
"email": "bg@g.com"
}
],
"headers": {
"x-powered-by": "Express",
"access-control-allow-origin": "*",
"content-type": "application/json; charset=utf-8",
"content-length": "189",
"etag": "W/"bd-Emx3/KChQLzf9+6bgFSHXPQgDTM"",
"date": "<<Masked>>",
"connection": "close"
},
"request": {
"uri": {
"protocol": "http:",
"slashes": true,
"auth": null,
"host": "mysite",
"port": "4202",
"hostname": "mysite",
"hash": null,
"search": "?username=billgates",
"query": "username=billgates",
"pathname": "/v1/users",
"path": "/v1/users?username=billgates",
"href": "http://mysite"
},
"method": "GET",
"headers": {
"Content-Type": "application/json",
"accept": "application/json",
"content-length": 2
}
}
}
function findValue(obj, k, v) {
let res = false
if(!obj || typeof obj != "object") return false
if (obj[k] == v) return true
else {
for (let [key, value] of Object.entries(obj)) {
if(Array.isArray(value)) { res = res || value.some(d => findValue(d, k, v)) }
if(typeof value == "object") { res = res || findValue(value, k, v) }
}
}
return res
}
console.log(findValue(object, 'externalId', 'billgates'))
console.log(findValue(object, 'lastName', 'da'))
console.log(findValue(object, 'x-powered-by', 'Express'))
console.log(findValue(object, 'externalId', 'Nitish'))
add a comment |
Though a different solution, still you can try below approach
let object = {
"statusCode": 200,
"body": [{
"id": "3",
"externalId": "billgates",
"status": "active",
"createdAt": "2018-11-14T08:36:50.967Z",
"updatedAt": "2018-11-14T08:36:50.967Z",
"firstName": "yehu",
"lastName": "da",
"email": "bg@g.com"
}
],
"headers": {
"x-powered-by": "Express",
"access-control-allow-origin": "*",
"content-type": "application/json; charset=utf-8",
"content-length": "189",
"etag": "W/"bd-Emx3/KChQLzf9+6bgFSHXPQgDTM"",
"date": "<<Masked>>",
"connection": "close"
},
"request": {
"uri": {
"protocol": "http:",
"slashes": true,
"auth": null,
"host": "mysite",
"port": "4202",
"hostname": "mysite",
"hash": null,
"search": "?username=billgates",
"query": "username=billgates",
"pathname": "/v1/users",
"path": "/v1/users?username=billgates",
"href": "http://mysite"
},
"method": "GET",
"headers": {
"Content-Type": "application/json",
"accept": "application/json",
"content-length": 2
}
}
}
function findValue(obj, k, v) {
let res = false
if(!obj || typeof obj != "object") return false
if (obj[k] == v) return true
else {
for (let [key, value] of Object.entries(obj)) {
if(Array.isArray(value)) { res = res || value.some(d => findValue(d, k, v)) }
if(typeof value == "object") { res = res || findValue(value, k, v) }
}
}
return res
}
console.log(findValue(object, 'externalId', 'billgates'))
console.log(findValue(object, 'lastName', 'da'))
console.log(findValue(object, 'x-powered-by', 'Express'))
console.log(findValue(object, 'externalId', 'Nitish'))
Though a different solution, still you can try below approach
let object = {
"statusCode": 200,
"body": [{
"id": "3",
"externalId": "billgates",
"status": "active",
"createdAt": "2018-11-14T08:36:50.967Z",
"updatedAt": "2018-11-14T08:36:50.967Z",
"firstName": "yehu",
"lastName": "da",
"email": "bg@g.com"
}
],
"headers": {
"x-powered-by": "Express",
"access-control-allow-origin": "*",
"content-type": "application/json; charset=utf-8",
"content-length": "189",
"etag": "W/"bd-Emx3/KChQLzf9+6bgFSHXPQgDTM"",
"date": "<<Masked>>",
"connection": "close"
},
"request": {
"uri": {
"protocol": "http:",
"slashes": true,
"auth": null,
"host": "mysite",
"port": "4202",
"hostname": "mysite",
"hash": null,
"search": "?username=billgates",
"query": "username=billgates",
"pathname": "/v1/users",
"path": "/v1/users?username=billgates",
"href": "http://mysite"
},
"method": "GET",
"headers": {
"Content-Type": "application/json",
"accept": "application/json",
"content-length": 2
}
}
}
function findValue(obj, k, v) {
let res = false
if(!obj || typeof obj != "object") return false
if (obj[k] == v) return true
else {
for (let [key, value] of Object.entries(obj)) {
if(Array.isArray(value)) { res = res || value.some(d => findValue(d, k, v)) }
if(typeof value == "object") { res = res || findValue(value, k, v) }
}
}
return res
}
console.log(findValue(object, 'externalId', 'billgates'))
console.log(findValue(object, 'lastName', 'da'))
console.log(findValue(object, 'x-powered-by', 'Express'))
console.log(findValue(object, 'externalId', 'Nitish'))
let object = {
"statusCode": 200,
"body": [{
"id": "3",
"externalId": "billgates",
"status": "active",
"createdAt": "2018-11-14T08:36:50.967Z",
"updatedAt": "2018-11-14T08:36:50.967Z",
"firstName": "yehu",
"lastName": "da",
"email": "bg@g.com"
}
],
"headers": {
"x-powered-by": "Express",
"access-control-allow-origin": "*",
"content-type": "application/json; charset=utf-8",
"content-length": "189",
"etag": "W/"bd-Emx3/KChQLzf9+6bgFSHXPQgDTM"",
"date": "<<Masked>>",
"connection": "close"
},
"request": {
"uri": {
"protocol": "http:",
"slashes": true,
"auth": null,
"host": "mysite",
"port": "4202",
"hostname": "mysite",
"hash": null,
"search": "?username=billgates",
"query": "username=billgates",
"pathname": "/v1/users",
"path": "/v1/users?username=billgates",
"href": "http://mysite"
},
"method": "GET",
"headers": {
"Content-Type": "application/json",
"accept": "application/json",
"content-length": 2
}
}
}
function findValue(obj, k, v) {
let res = false
if(!obj || typeof obj != "object") return false
if (obj[k] == v) return true
else {
for (let [key, value] of Object.entries(obj)) {
if(Array.isArray(value)) { res = res || value.some(d => findValue(d, k, v)) }
if(typeof value == "object") { res = res || findValue(value, k, v) }
}
}
return res
}
console.log(findValue(object, 'externalId', 'billgates'))
console.log(findValue(object, 'lastName', 'da'))
console.log(findValue(object, 'x-powered-by', 'Express'))
console.log(findValue(object, 'externalId', 'Nitish'))
let object = {
"statusCode": 200,
"body": [{
"id": "3",
"externalId": "billgates",
"status": "active",
"createdAt": "2018-11-14T08:36:50.967Z",
"updatedAt": "2018-11-14T08:36:50.967Z",
"firstName": "yehu",
"lastName": "da",
"email": "bg@g.com"
}
],
"headers": {
"x-powered-by": "Express",
"access-control-allow-origin": "*",
"content-type": "application/json; charset=utf-8",
"content-length": "189",
"etag": "W/"bd-Emx3/KChQLzf9+6bgFSHXPQgDTM"",
"date": "<<Masked>>",
"connection": "close"
},
"request": {
"uri": {
"protocol": "http:",
"slashes": true,
"auth": null,
"host": "mysite",
"port": "4202",
"hostname": "mysite",
"hash": null,
"search": "?username=billgates",
"query": "username=billgates",
"pathname": "/v1/users",
"path": "/v1/users?username=billgates",
"href": "http://mysite"
},
"method": "GET",
"headers": {
"Content-Type": "application/json",
"accept": "application/json",
"content-length": 2
}
}
}
function findValue(obj, k, v) {
let res = false
if(!obj || typeof obj != "object") return false
if (obj[k] == v) return true
else {
for (let [key, value] of Object.entries(obj)) {
if(Array.isArray(value)) { res = res || value.some(d => findValue(d, k, v)) }
if(typeof value == "object") { res = res || findValue(value, k, v) }
}
}
return res
}
console.log(findValue(object, 'externalId', 'billgates'))
console.log(findValue(object, 'lastName', 'da'))
console.log(findValue(object, 'x-powered-by', 'Express'))
console.log(findValue(object, 'externalId', 'Nitish'))
answered Nov 15 '18 at 10:53
Nitish NarangNitish Narang
2,9601815
2,9601815
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53316447%2ffinding-a-key-in-json%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
2
hint ... it's
"id": "3",
that is causing the problem (you need to check ifobj[localKey]
is an actual OBJECT before recursing ...you'll also need to recurse PROPERLY - because unless the key is found in the top level, you'll always get undefined once you fix your infinite recursion– Bravo
Nov 15 '18 at 9:45
Note that if you're dealing with a plain object without a meaningful internal prototype, the
hasOwnProperty
check is superfluous. (or just useObject.keys
/entries
instead, which only iterate over properties directly on the object)– CertainPerformance
Nov 15 '18 at 9:49
1
quickest fix for your code pastebin.com/8YQb4mQ3 - but I wouldn't do it this way at all
– Bravo
Nov 15 '18 at 9:52
@Bravo why you wouldn't do it this way. whats wrong with it?
– Limbo
Nov 15 '18 at 10:09
to be honest, I don't know why I said that :p I quickly tried other ways and realised the error of that part of the statement :
– Bravo
Nov 15 '18 at 10:10