如何从javascript对象获取属性值

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)


对于较旧的浏览器,请检查reduce方法的polyfill选项.

  • 添加针对"未定义"值的保护是个好主意,就像上面的答案一样. (2认同)

gev*_*org 6

使用以下功能:

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)