Angular 2 TypeScript不同的过滤嵌套数据

时间:2017-03-18 23:28:10

标签: json typescript nested filtering

我想知道如何在TypeScript中过滤嵌套数据并获取不同的值。

我试图获取国家/地区名称:long_name作为types[0] == "country"

的不同值

我可以编写3个For循环和2个If语句,但我不知道如何通过.filter().find()以更简单的方式执行此操作,有人可以帮帮我吗?

我需要一个LINQ相似的声明来选择所有国家/地区名称long_nametypes[0] == "country"

这是数据:

enter image description here

这是我的代码:

getAllCountries(): Observable<any[]> {
    return this.getAll()
            .map((countries: any[]) => countries.filter(c => c.address_components.some(nestedObj => nestedObj.types.indexOf("country") >= 0)));
}

我现在得到的是通过过滤条件的所有对象。我现在需要将这些国家/地区名称(long_name)抓取/映射到不同的数组。

2 个答案:

答案 0 :(得分:1)

如果您希望每个条目的所有内容都是long_name值,则可以按如下方式提取它们:

let long_names = countries
  .map(country => country.address_components.filter(component => component.types.indexOf('country') > -1)  // get relevant components
  .filter(components => components.length > 0)  // filter out any without a country component
  .map(components => components[0].long_name);  // get long name of first country component

然后,您可以应用Unique values in an array中的解决方案来获取唯一值。

答案 1 :(得分:0)

使用lodash的一种更简单的方法是:

countries=[];
let data = _.find(countries, { types : ['country'] });
countries= _.uniq(countries.push((data.long_name ? data.long_name : ''))) ;