var obj = {
skill:{
eat:true,
walk:true
},
address:{
home:"where",
company:"where"
}
};
我可以通过以下方式获得一件商品:
tester.activate(obj[skill]);
我如何获得所有物品?
答案 0 :(得分: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”函数的调用是为了防止此代码迭代“obj”上存在的实际从Object原型继承的属性。 有时你可能想要包括那些,但在这种情况下,过滤它们是安全的(我认为)。 (并且@sdleihssirhc指出,如果你想真的确定,你可以使用Object.prototype.hasOwnProperty.call(obj, k)
)
答案 1 :(得分: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