使用数组深入研究Javascript对象

时间:2015-04-07 14:11:51

标签: javascript

我有一系列的字符串作为一条路径'到JavaScript对象的某个属性:

var car = {
 "owner": "Joe",
 "model": {
   name: "Ford",
   "manufacturer": {
      "founder": "Henry Ford"
   }
 }
};

var address = ["model", "manufacturer", "founder"];

我想编写一个函数,它将使用该地址来查找位于路径末尾的对象的属性,在示例中,返回" Henry Ford"。我希望该函数能够处理任意长度的地址。这个功能会是什么样的?

3 个答案:

答案 0 :(得分:1)

您可以使用.reduce()

执行此操作
var value = address.reduce(function(o, name) { return o && o[name]; }, car);

.reduce()函数以一个初始的“累加器”值开始,该值将是car对象。它遍历数组,传入每个值并期望返回下一个累加器值。每个步骤只查找属性值并返回它,或者累加器本身它是假的。

答案 1 :(得分:1)

这将处理搜索失败的情况。此外,只需查看代码即可轻松理解。

输入:对象,数组

输出:找到键,否则为null

function searchObject(root, pathArray) {
    var node = root;
    for(var index in pathArray) {
        key = pathArray[index];
        if(key in node) {
            node = node[key];
        } else {
            node = null;
            break;
        }
    }
    return node;
}

示例:

var car = {
 "owner": "Joe",
 "model": {
   name: "Ford",
   "manufacturer": {
      "founder": "Henry Ford"
   }
 }
};

var address = ["model", "manufacturer", "founder"];

然后searchObject(car, address)返回“亨利福特”。

答案 2 :(得分:0)

尝试......

function getValue(ob, address) {
  result = ob;
  for (var i=0,len=address.length; i<len; i++) {
    result = result[address[i]];
  }
  return result;
}

这应该返回地址列表末尾的对象或值。