cqwcns 发表于 2019-12-24 08:29

JS 对象递归遍历的问题

如下代码:
var obj = {        test1: 'v1',test2: 'v2',test3: 'v3',test4: {t1: 'ss',t2: 'dd'}};

function f(obj) {
for (var i in obj) {
if (typeof obj === "object") {
f(obj);
} else {

console.log(obj);
}
}
}

f(obj);
会输出对象全部的属性,结果是这样:
v1
v2
v3
ss
dd
但我希望输出键名+属性,代码要怎么写?输出效果例如这样:
test1=v1
test2=v2
test3=v3
test4.t1=ss
test4.t2=dd
谢谢各位吾友指点。

cxwht 发表于 2019-12-24 08:47

用JS中的 模板字符串 应该可以的 ,具体可以百度一下,就是tab键上面的反引号

好听吗 发表于 2019-12-24 08:55

本帖最后由 好听吗 于 2019-12-24 08:58 编辑

``` javascript
var obj = { test1: 'v1',test2: 'v2',test3: 'v3',test4: {t1: 'ss',t2: 'dd'}};

function f(obj) {
        for (var i in obj) {
                if (typeof obj === "object") {
                        f(obj);
                } else {

                        console.log(`${i}=${obj}`);
                }
        }
}

f(obj);
```

cqwcns 发表于 2019-12-24 09:00

好听吗 发表于 2019-12-24 08:55
var obj = { test1: 'v1',test2: 'v2',test3: 'v3',test4: {t1: 'ss',t2: 'd ...

大哥好,谢谢指点,对象中嵌套对象那种还有点问题(如最后两行),你的代码输出是这样:
test1=v1
test2=v2
test3=v3
t1=ss
t2=dd
能否输出这样,谢谢:
test1=v1
test2=v2
test3=v3
test4.t1=ss
test4.t2=dd

好听吗 发表于 2019-12-24 09:20

cqwcns 发表于 2019-12-24 09:00
大哥好,谢谢指点,对象中嵌套对象那种还有点问题(如最后两行),你的代码输出是这样:
test1=v1
test ...

问下 最后这样输出是为了 干什么呢

下面这样的方法不是很实用, 可能会出现一些问题
```
var obj = { test1: 'v1',test2: 'v2',test3: 'v3',test4: {t1: 'ss',t2: 'dd'}};
let pi = ''
function f(obj) {
       
        for (var i in obj) {
                if (typeof obj === "object") {
                        pi = i
                        f(obj);
                } else if(pi){
                        console.log(`${pi}.${i} = ${obj}`)
                }else{
                        console.log(`${i}=${obj}`)
                }
                //             console.log(`${i}=${obj}`, obj);
        }
}

f(obj);
```

冰茶荼 发表于 2019-12-24 09:22


var obj = { test1: 'v1',test2: 'v2',test3: 'v3',test4: {t1: 'ss',t2: 'dd'}};
function fun(obj,perfix) {
      perfix=perfix?perfix+".":"";
      for(item in obj){
            if(typeof obj === "object"){
                fun(obj,item);
            }else{
                console.log(`${perfix}${item}=${obj}`);
            }
      }
    }
    fun(obj)

https://s2.ax1x.com/2019/12/24/l92Ecj.png

码神 发表于 2019-12-24 09:25

本帖最后由 码神 于 2019-12-24 09:41 编辑

cqwcns 发表于 2019-12-24 09:00
大哥好,谢谢指点,对象中嵌套对象那种还有点问题(如最后两行),你的代码输出是这样:
test1=v1
test ...
var obj = { test1: 'v1',test2: 'v2',test3: 'v3',test4: {t1: 'ss',t2: {a1: 'a1', a2: {c1: 'c1', c2: 'c2'}}}};

function f(obj, attribute) {
    for (var i in obj) {
      if (typeof obj === "object") {
          if(attribute) {
            f(obj, `${attribute}.${i}`);
          }else {
            f(obj, i);
          }
            
      } else {
          if(attribute) {
            console.log(`${attribute}.${i}=${obj}`);
          }else {
            console.log(`${i}=${obj}`);
          }
            
      }
    }
}

f(obj);

cqwcns 发表于 2019-12-24 09:25

好听吗 发表于 2019-12-24 09:20
问下 最后这样输出是为了 干什么呢

下面这样的方法不是很实用, 可能会出现一些问题

是为了有完整的层级关系,用来写入另一个对象。
谢谢大哥。

wei125483 发表于 2019-12-24 09:27

var obj = { test1: 'v1',test2: 'v2',test3: 'v3',test4: {t1: 'ss',t2: 'dd',t3:{a:'12',b:'34'}}};

function f(obj,keys='') {
    for (var i in obj) {
      if (typeof obj === "object") {
            f(obj,keys.concat(`${i}.`));
      } else {
                       
            console.log(`${keys+i}=${obj}`);
      }
    }
}

wei125483 发表于 2019-12-24 09:28

wei125483 发表于 2019-12-24 09:27
var obj = { test1: 'v1',test2: 'v2',test3: 'v3',test4: {t1: 'ss',t2: 'dd',t3:{a:'12',b:'34'}}};

f ...

写法一般   能满足你的要求
页: [1] 2
查看完整版本: JS 对象递归遍历的问题