Bim*_*Das 4 javascript arrays jquery javascript-objects dom-events
我有一个JavaScript对象.
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)
Run Code Online (Sandbox Code Playgroud)
这很好用.但是,如果我尝试获取"Address.Name"的属性值的值,
喜欢:var dataToRetrieve = "Address.Name";
它表明undefined.
注意:属性变量由用户从HTML设置并且可以根据用户要求(他想要的属性值)进行更改.
我想要实现的目标:
1)如果dataToRetrieve = "Name",它应该给我"John",
2)如果dataToRetrieve = "Id",它应该给我"100",
3)如果dataToRetrieve = "Address.Name",它应该给我"Bangalore",
4)如果dataToRetrieve = "Address.Id",它应该给我1
Plunkr在这里:PLUNKR
Pra*_*lan 11
使用reduce()方法
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")
)Run Code Online (Sandbox Code Playgroud)
使用以下功能:
var obj = { Id: "100", Name: "John",
Address: [{ Id:1, Name:"Bangalore" }, { Id:2, Name: "Mysore" } ] };
function GetPropertyValue(object, dataToRetrieve) {
dataToRetrieve.split('.').forEach(function(token) {
if (object) object = object[token];
});
return object;
}
console.log(
GetPropertyValue(obj, "Address.0.Name"),
GetPropertyValue(obj, "Address.1.Id"),
GetPropertyValue(obj, "Name"),
GetPropertyValue(obj, "Id"),
GetPropertyValue(obj, "Unknown"),
GetPropertyValue(obj, "Some.Unknown.Property")
);Run Code Online (Sandbox Code Playgroud)