首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Angular 6循环遍历复杂的JSON对象

使用Angular 6循环遍历复杂的JSON对象
EN

Stack Overflow用户
提问于 2020-02-08 05:19:59
回答 2查看 71关注 0票数 0

我有一个JSON对象,我只对一个关键的“代码”和它的值感兴趣。我想运行一个循环来获取每个地区、国家和城市的这些值,并将它们存储在一个数组中。

代码语言:javascript
复制
{
"region":{
    "America":{
        "countries":{
            "US":{
                "cities":{
                    "NY":{
                        "codes":["142","2243","312","4123","5132"]
                    },
                    "LA":{
                        "codes":["1465","2465","3453","4132","542"]
                    }
                }
            },
            "CANADA":{
                "cities":{
                    "TORNTO":{
                        "codes":["1465","2465","3453","4132","542"]
                    }
                }

            }
        }
    },
    "ASIA":{
        "countries":{
            "India":{
                "cities":{
                    "Delhi ":{
                        "codes":["142","2243","312","4123","5132"]
                    },
                    "Calcutta":{
                        "codes":["1465","2465","3453","4132","542"]
                    }
                }
            },
            "CHINA":{
                "cities":{
                    "HONKKON":{
                        "codes":["1465","2465","3453","4132","542"]
                    }
                }

            }
        }
    }

}

}

我所做的一切

代码语言:javascript
复制
getCodes(regions){
let ccode = [];
for (let key of Object.values(region)) {
    for (let temp of Object.values(key)) {
        for (let ctemp of Object.values(temp)) {
            for (btemp of Object.values(ctemp)) {
                for (let bbtemp of Object.values(btemp)) {
                    ccode.push(...bbtemp["code"])
}
            }
        }
    }

}

}

然而,我感兴趣的是收集每个地区的Code值,并将它们放在一个列表中。有什么实用的方法吗?

EN

回答 2

Stack Overflow用户

发布于 2020-02-08 05:29:48

您可以使用如下所示的递归方法:

代码语言:javascript
复制
const extractCodes = obj => {
  let codes = [];
  for (const key in obj) {
    if (key === 'codes') return [...obj[key]];
    else {
      codes = [...codes, ...extractCodes(obj[key])];
    }
  }
  return codes;
};

const region = {
  America: {
    countries: {
      US: {
        cities: {
          NY: {
            codes: ['142', '2243', '312', '4123', '5132']
          },
          LA: {
            codes: ['1465', '2465', '3453', '4132', '542']
          }
        }
      },
      CANADA: {
        cities: {
          TORNTO: {
            codes: ['1465', '2465', '3453', '4132', '542']
          }
        }
      }
    }
  },
  ASIA: {
    countries: {
      India: {
        cities: {
          'Delhi ': {
            codes: ['142', '2243', '312', '4123', '5132']
          },
          Calcutta: {
            codes: ['1465', '2465', '3453', '4132', '542']
          }
        }
      },
      CHINA: {
        cities: {
          HONKKON: {
            codes: ['1465', '2465', '3453', '4132', '542']
          }
        }
      }
    }
  }
};

console.log(extractCodes(region));

如果您只想提取唯一值(不重复的代码),则可以使用Set

代码语言:javascript
复制
const extractCodes = obj => {
  let codes = [];
  for (const key in obj) {
    if (key === 'codes') return [...obj[key]];
    else {
      codes = [...new Set([...codes, ...extractCodes(obj[key])])];
    }
  }
  return codes;
};

const region = {
  America: {
    countries: {
      US: {
        cities: {
          NY: {
            codes: ['142', '2243', '312', '4123', '5132']
          },
          LA: {
            codes: ['1465', '2465', '3453', '4132', '542']
          }
        }
      },
      CANADA: {
        cities: {
          TORNTO: {
            codes: ['1465', '2465', '3453', '4132', '542']
          }
        }
      }
    }
  },
  ASIA: {
    countries: {
      India: {
        cities: {
          'Delhi ': {
            codes: ['142', '2243', '312', '4123', '5132']
          },
          Calcutta: {
            codes: ['1465', '2465', '3453', '4132', '542']
          }
        }
      },
      CHINA: {
        cities: {
          HONKKON: {
            codes: ['1465', '2465', '3453', '4132', '542']
          }
        }
      }
    }
  }
};

console.log(extractCodes(region));

票数 2
EN

Stack Overflow用户

发布于 2020-02-08 05:30:58

这是一种老式的方法,但它可以在所有浏览器中运行:

代码语言:javascript
复制
var json = { ... };

function getCodes(obj) {
  var codes = [];
  for (var p in obj) {
    if (obj.hasOwnProperty(p)) {
      if (p === "codes") {
        codes = codes.concat(obj[p]);
      } else if (typeof obj[p] === "object") {
        codes = codes.concat(getCodes(obj[p]));
      }
    }
  }
  return codes;
}

var codes = getCodes(json); // ["142", "2243", "312", "4123", ...]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60121219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档