如何在Javascript中保持对象递归循环输出的顺序?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (142)

以下是我编写的代码:

function recurOBJ(my_obj){
    let x, str
    str = ``
    for( x in my_obj ){
        str += x + `: ` + my_obj[x].copy
        console.log(x);
        if ( my_obj[x].hasOwnProperty('list') ){
            recurOBJ(my_obj[x].list)
        }
    }
    console.log(str);
    return str
}

这是一个示例对象:

{
    "item_01": {
        "copy": ["Some text."]
    },
    "item_02": {
        "copy": ["More text."],
        "list": {
            "listItem01": {
                "copy": ["List text."],
                "list": {
                        "item_a": { "copy": ["A: Lorem ipsum dolor sit amet."]},
                        "item_b": { "copy": ["B: Lorem ipsum dolor sit amet."]},
                        "item_c": { "copy": ["C: Lorem ipsum dolor sit amet."]},
                        "item_d": { "copy": ["D: Lorem ipsum dolor sit amet."]}
                }
        }}
    }
}

更正=>控制台日志(X):

item_01
item_02
listItem01
item_a
item_b
item_c
item_d

不正确=>控制台日志(Str):

item_a: A: Lorem ipsum dolor sit amet.
item_b: B: Lorem ipsum dolor sit amet.
item_c: C: Lorem ipsum dolor sit amet.
item_d: D: Lorem ipsum dolor sit amet.
listItem01: List text.
item_01: Some text.
item_02: More text.
提问于
用户回答回答于

下面的是修改后的代码:

function recurOBJ(my_obj){
    let x, str
    str = ``
    for( x in my_obj ){
        str += x + ': ' + my_obj[x].copy + '\n'
        if ( my_obj[x].hasOwnProperty('list') ){
            str += recurOBJ(my_obj[x].list) + '\n'
        }
    }
    return str
}

输出:

item_01: Some text.
item_02: More text.
listItem01: List text.
item_a: A: Lorem ipsum dolor sit amet.
item_b: B: Lorem ipsum dolor sit amet.
item_c: C: Lorem ipsum dolor sit amet.
item_d: D: Lorem ipsum dolor sit amet.
用户回答回答于

可以采用递归方法,方法是返回一个字符串数组,以及list属性或空对象

function getData(object) {
    return [].concat(
        ...Object
            .entries(object)
            .map(([k, v]) => [k + ': ' + v.copy[0], ...getData(v.list || {})])
    );
}

var data = { item_01: { copy: ["Some text."] }, item_02: { copy: ["More text."], list: { listItem01: { copy: ["List text."], list: { item_a: { copy: ["A: Lorem ipsum dolor sit amet."] }, item_b: { copy: ["B: Lorem ipsum dolor sit amet."] }, item_c: { copy: ["C: Lorem ipsum dolor sit amet."] }, item_d: { copy: ["D: Lorem ipsum dolor sit amet."] } } } } } };

console.log(getData(data));
.as-console-wrapper { max-height: 100% !important; top: 0; }

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励