Friday, May 17, 2024
 Popular · Latest · Hot · Upcoming
141
rated 0 times [  142] [ 1]  / answers: 1 / hits: 28110  / 8 Years ago, sun, may 29, 2016, 12:00:00

I have a JavaScript object.



var obj = { Id: 100, Name: John, Address: {Id:1,Name:Bangalore} }
var dataToRetrieve= Name;

function GetPropertyValue(object,dataToRetrieve){
return obj[dataToRetrieve]
}
var retval = GetPropertyValue(obj,dataToRetrieve)


This works fine. But if I try to get the value of property value of Address.Name ,



Like : var dataToRetrieve = Address.Name;
it shows undefined.



Note : The property variable is set by user from HTML And it can be changed according to user requirement(which property value he wants).



What I want to achieve :



1) If dataToRetrieve = Name , it should give me John,



2) If dataToRetrieve = Id , it should give me 100,



3) If dataToRetrieve = Address.Name , it should give me Bangalore,



4) If dataToRetrieve = Address.Id , it should give me 1



Plunkr Here : PLUNKR


More From » jquery

 Answers
17

Use reduce() method





var obj = {
Id: 100,
Name: John,
Address: {
Id: 1,
Name: Bangalore
}
}

function GetPropertyValue(obj1, dataToRetrieve) {
return dataToRetrieve
.split('.') // split string based on `.`
.reduce(function(o, k) {
return o && o[k]; // get inner property if `o` is defined else get `o` and return
}, obj1) // set initial value as object
}


console.log(
GetPropertyValue(obj, Name),
GetPropertyValue(obj, Id),
GetPropertyValue(obj, Address.Name),
GetPropertyValue(obj, Address.Id),
GetPropertyValue(obj, Address.Idsd),
GetPropertyValue(obj, Addre.Idsd)
)







For older browser check polyfill option of reduce method.


[#61984] Thursday, May 26, 2016, 8 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
jackie

Total Points: 442
Total Questions: 107
Total Answers: 94

Location: Honduras
Member since Sun, Dec 26, 2021
2 Years ago
jackie questions
Sat, Sep 18, 21, 00:00, 3 Years ago
Wed, Jul 14, 21, 00:00, 3 Years ago
;