我想知道是否有人可以指出我正确的方向。当我有一个对象时,我通常会通过FOR IN LOOP读取它的属性。因为我知道属性是什么因为我创建了这个对象,所以我知道键和它们的值是什么。我想知道是否有任何其他方法,如递归方法来读取对象及其属性。
所以这是一个例子的对象:
var mObj = {};
mObj.mArr = [];
mObj.mArr.push({id:['id1','id2','id3']});
mArr.push({days:['Monday','Tuesday','Wednesday','Thursday']});
mObj.mArr.push({colors:['orange','red','blue','green','yellow','white']});
正如您所看到的,我已经声明了mObj并在其中,我已将mArr声明为数组。然后我在mArr中推送三个对象:
如果我想找出mArr长度,我会写一些像:
alert(mObj.mArr.length);
如果我想循环访问该对象,我会有类似的东西:
for(var a in mObj.mArr[0])
{
alert(mObj.mArr[0][a]);
}
我想知道我是否可以正确使用一个函数并传递恰好是“mObj”的父对象,这个递归函数将通过“mObj”并从头到脚列出其所有属性。
我很感激您的任何意见。
非常感谢。
答案 0 :(得分:16)
这是一个基本的example:
var mObj = {};
mObj.mArr = [];
mObj.mArr.push({id:['id1','id2','id3']});
mObj.mArr.push({days:['Monday','Tuesday','Wednesday','Thursday']});
mObj.mArr.push({colors:['orange','red','blue','green','yellow','white']});
function r(obj) {
if (obj)
for (var key in obj) {
if (typeof obj[key] == "object")
r(obj[key]);
else if (typeof obj[key] != "function")
console.log(obj[key])
}
return;
}
r(mObj);
如果有一个对象没有函数再次调用该函数,否则如果它不是函数,则控制台记录该值。