使用Javascript中的变量对数组中对象的属性访问

时间:2017-01-24 14:36:30

标签: javascript arrays

我正在尝试访问数组中对象内的对象的属性。口感相当。问题是,我想使用变量来做到这一点。如果我用代码解释它可能更容易;

var array= [
  { id: 0, client: { id:0, clientName: "John" }},
  { id: 1, client: { id:1, clientName: "Tom" }}
]
console.log(array[0][client][clientName]); // Displays correctly

因此上面的代码使用括号表示法按预期工作。但正如我之前所说,我需要像这个例子一样使用变量;

var array= [
  { id: 0, client: { id:0, clientName: "John" }},
  { id: 0, client: { id:0, clientName: "John" }}
]
var property = "client.clientName";
console.log(array[0][property]); // Does not work

我理解为什么这段代码不起作用,但实际上这更像是一个伪代码来解释我想要实现的目标!

3 个答案:

答案 0 :(得分:1)

var array= [
  { id: 0, client: { id:0, clientName: "John" }},
  { id: 0, client: { id:0, clientName: "John" }}
]
var property = "client.clientName",
    getPropByString=function(data,val){
      val=val.split(/\./g);
      var dataApp=data;
      val.forEach(function(prop){
        dataApp=dataApp[prop];
      });
      return dataApp;
    };
console.log(getPropByString(array[0],property));

答案 1 :(得分:1)

你不能像那样得到它而是拆分并获得嵌套属性。使用Array#reduce方法通过使用String#split方法拆分属性字符串来获取嵌套属性。

// split the string and iterate over the result array
property.split('.').reduce(function(o, p) {
  // check object defined and return nested property value
  return o && o[p];
  // set initial value as the object where you need to fetch data
}, array[0])



var array = [{
  id: 0,
  client: {
    id: 0,
    clientName: "John"
  }
}, {
  id: 0,
  client: {
    id: 0,
    clientName: "John"
  }
}]

var property = "client.clientName";
console.log(
  property.split('.').reduce(function(o, p) {
    return o && o[p];
  }, array[0])
);




答案 2 :(得分:0)

您可以使用一个函数,该函数将字符串与属性名称分开并减少给定对象。



function getValue(object, path) {
    return path.split('.').reduce(function (o, k) {
        return (o || {})[k];
    }, object);
}

var array = [{ id: 0, client: { id:0, clientName: "John" } }, { id: 1, client: { id:1, clientName: "Tom" } }],
    property = "client.clientName";

console.log(getValue(array[0], property));