输出嵌套数组,输出键而非内容?

时间:2018-01-28 18:19:04

标签: javascript

阅读此SO post后,我仍然遇到循环数据结构的问题:

users:
 {
   'names': ['john','chris'],
   'addresses': ['10 king street', '20 king street'],
 }

循环:

for (const prop in this.payload) {
      console.log(prop); //names

      for (const item of prop) {
           console.log(item); //n //a //m //e //s
      }
 }

它似乎输出了键“names”的字母,然后对其他键执行相同的操作。

为什么呢?预期的输出是:

names
john
chris
addresses
10 king street
20 king street

2 个答案:

答案 0 :(得分:1)

prop是一个字符串。如果你遍历一个字符串,你将遍历它的字符,这就是你所看到的。

相反,获取该属性名称引用的值,并循环该值:

this.payload = {
  'names': ['john', 'chris'],
  'addresses': ['10 king street', '20 king street'],
};

for (const prop in this.payload) {
  console.log(prop); //names

  for (const item of this.payload[prop]) {
    console.log(item);
  }
}

更好的是,利用Object.entries()

this.payload =  {
   'names': ['john','chris'],
   'addresses': ['10 king street', '20 king street'],
};

for (const [prop, items] of Object.entries(this.payload)) {
    console.log(prop);
    
    for (const item of items) {
        console.log(item);
    }
}

如果您不关心属性名称,也可以使用Object.values()

答案 1 :(得分:0)

要访问这些值,请使用this.payload[prop]

for (const prop in this.payload) {
  console.log(prop); //names

  for (const item of this.payload[prop]) {
       console.log(item);
  }
 }