我想知道如何在TypeScript中过滤嵌套数据并获取不同的值。
我试图获取国家/地区名称:long_name
作为types[0] == "country"
我可以编写3个For
循环和2个If
语句,但我不知道如何通过.filter()
或.find()
以更简单的方式执行此操作,有人可以帮帮我吗?
我需要一个LINQ
相似的声明来选择所有国家/地区名称long_name
)types[0] == "country"
。
这是数据:
这是我的代码:
getAllCountries(): Observable<any[]> {
return this.getAll()
.map((countries: any[]) => countries.filter(c => c.address_components.some(nestedObj => nestedObj.types.indexOf("country") >= 0)));
}
我现在得到的是通过过滤条件的所有对象。我现在需要将这些国家/地区名称(long_name
)抓取/映射到不同的数组。
答案 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 : ''))) ;