嵌套为..in 循环,列出多维对象的属性(对象)

nested for...in loop that lists properties(objects) of a multidimensional object

本文关键字:对象 属性 in 循环 嵌套      更新时间:2023-09-26

我无法理解如何嵌套...in 相互循环,以列出多维对象中的所有属性。

var list = {};
list.one = {
    a: true,
    b: false,
    c: true
};
list.two = {
    a: true,
    b: false,
    c: true
};
var listing = function(obj) {
    for (prop in obj) {
        document.write(prop+"<br>");        
        for (props in obj) { //not sure what to write here
            document.write("---"+props+"<br>");
        }
}
listing(list);

我如何编写 for 循环来获得这样的东西:

one
---true
---false
---true
two
---true
---false
---true

每个是否连续嵌套...In Loop需要更复杂,测试对象是否确实是多维的?我很迷茫。

只需要遍历内部循环中的内部对象。见下文:

var list = {};
list.one = {
    a: true,
    b: false,
    c: true
};
list.two = {
    a: true,
    b: false,
    c: true
};
var listing = function(outerObj) {
    for (var outerProp in outerObj) {
        var innerObj = outerObj[outerProp];
        document.write(prop+"<br>");
        for (var innerProp in innerObj) {
            document.write("---"+props+"<br>");
        }
}
listing(list);

你需要枚举内部对象,obj[prop]

function listing(obj) {
    for (var prop in obj) {
        document.write(prop+"<br>");        
        for (var nestedProp in obj[prop]) {
            document.write("---"+nestedProp+": "+obj[prop][nestedProp]+"<br />");
        }
    }
}

每个是否连续嵌套...In Loop需要更复杂,测试对象是否确实是多维的?

不,如果您事先知道维度的数量,则无需对其进行测试,只需嵌套循环即可。对于任意数量的级别,您将使用递归函数,该函数需要测试参数是否是可枚举对象是否是"叶"值。