如何在Javascript中使用递归函数时读取对象的属性?

时间:2011-08-18 03:55:39

标签: javascript

我想知道是否有人可以指出我正确的方向。当我有一个对象时,我通常会通过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中推送三个对象:

  1. ID
  2. 颜色
  3. 如果我想找出mArr长度,我会写一些像:

    alert(mObj.mArr.length);
    

    如果我想循环访问该对象,我会有类似的东西:

    for(var a in mObj.mArr[0])
    {
       alert(mObj.mArr[0][a]);
    }
    

    我想知道我是否可以正确使用一个函数并传递恰好是“mObj”的父对象,这个递归函数将通过“mObj”并从头到脚列出其所有属性。

    我很感激您的任何意见。

    非常感谢。

1 个答案:

答案 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);

如果有一个对象没有函数再次调用该函数,否则如果它不是函数,则控制台记录该值。