2011-01-31 40 views
1
var obj = { 
    skill:{ 
     eat:true, 
     walk:true 
    }, 
    address:{ 
     home:"where", 
     company:"where" 
    } 
}; 

我可以得到一个项目:如何操作对象结构中的JavaScript

tester.activate(obj[skill]); 

我怎样才能获得的所有项目?

+3

你的问题是不明确的。 – Phrogz 2011-01-31 17:14:01

回答

5

您可以通过对象的属性迭代与for ... in

for (var k in obj) { 
    if (obj.hasOwnProperty(k)) { 
    var value = obj[k]; 
    alert("property name is " + k + " value is " + value); 
    } 
} 

的“hasOwnProperty”函数的调用也可把这个代码通过实际上是继承了目前的“目标文件”属性迭代来自Object原型。 有时候你可能想要包括这些,但在这种情况下,过滤它们是安全的(我认为)。 (和@sdleihssirhc指出,如果你想成为真正肯定,您可以使用Object.prototype.hasOwnProperty.call(obj, k)

+0

让我们看看你对这个问题的猜测是否得到了回报。 (或者这个问题对你来说很明显,但对我来说不是吗?) – Phrogz 2011-01-31 17:15:21

1

如果你需要的技能,你可以得到

obj.skill

如果您需要的地址,你可以得到

obj.address

,或者如果你想获得个人数据:

var eat = obj.skill.eat; 
var company = obj.address.company; 

如果你想你可以遍历结构的项目,推动所有项目到数组

function pushObjToArray(obj, array) { 
    for (var key in obj) { 
     if (obj.hasOwnProperty(key)) { 
      if (obj[key] instanceof Array) { 
        pushObjToArray(obj[key], array); 
      } else if (obj[key] instanceof Object) { 
        pushObjToArray(obj[key], array); 
      } else { 
        array.push(obj[key]); 
      } 
     } 
    } 
    return array; 
} 

var array = []; 
pushObjToArray(array, obj); 

退一步破坏键和所有的数据推到一个数组没什么用。

你真的想做什么?

你可能会寻找类似_.flatten