javascript - 在javascript中嵌套对象数组
问题描述
我想在不改变原始数组的情况下将嵌套的对象数组简化为字符串数组,但是对象数组的国家/地区的值会发生变化。我将如何纠正,所以我将在 newCountries 中获得新的对象数组,并且对象数组的旧值不会被修改。即国家
const countries = {
"country": [{
"name": "India",
"cities": [{
"name": "Mumbai",
},
{
"name": "Delhi",
}
]
},
{
"name": "Australia",
"cities": [{
"name": "Sydney",
},
{
"name": "Melbourne",
}
]
}
]
}
// I have tried following code
var newCountries = Object.assign({}, countries);
newCountries.country.map(val => {
if (val.cities) {
var city = val.cities.map(city => {
return city.name
});
val.cities = [];
val.cities = city;
}
return val;
})
console.log('new object\n', newCountries)
console.log('old object\n', countries)
<b>output</b>
<pre>
{
"country": [
{
"name": "India",
"cities": [
"Mumbai",
"Delhi"
]
},
{
"name": "Australia",
"cities": [
"Sydney",
"Melbourne"
]
}
]
}
</pre>
解决方案
好吧,这是一项微不足道的任务。只需遍历每个国家,并通过将对象映射到“name”键的值,将一组新的城市名称分配给现有的。
你也可以试试这个,假设name
是对象中唯一的键。
country.cities = country.cities.reduce((arr, city) => arr.concat(Object.values(city)), [])
您甚至可以使用以下方法进一步简化Array.prototype.flatMap
:
country.cities = country.cities.flatMap(city => Object.values(city))
注意: flatMap
在现代浏览器中是一个实验性功能。
- Chrome – 版本 69 (2018-09-04)
- 边缘 -没有
- Firefox – 版本 62 (2019-09-03)
- Internet Explorer –否
- Opera – 版本 56 (2018-09-25 → Chromium 69)
- Safari – 版本 12 (2018-09-17)
const countries = {
"country": [{
"name": "India",
"cities": [{
"name": "Mumbai",
}, {
"name": "Delhi",
}]
}, {
"name": "Australia",
"cities": [{
"name": "Sydney",
}, {
"name": "Melbourne",
}]
}]
}
// Loop over each country
countries.country.forEach(country => {
// Replace `{ name : "CITY_NAME" }` with just `"CITY_NAME"`
country.cities = country.cities.map(city => city.name)
})
console.log(countries);
.as-console-wrapper { top: 0; max-height: 100% !important; }
推荐阅读
- python - 避免DP的尾递归python
- python - 我必须评估一个表达式,但运算符存储在 Python 中的字符串中
- java - 没有为类 org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor 找到序列化程序
- java - 如何在 JTabbedPane 中使用布局管理器?
- java - Java:如何打印另一个类的数组?我的数组包含该类的另一个变量
- amazon-dynamodb - 在主键上创建全局二级索引是否有意义?
- python - 对数据块执行操作
- c# - C# 在另一个布尔方法中引用一个布尔方法的返回值
- android - LocationDataSourceHERE 上的访问被拒绝
- python - 如何在 Python QT Designer 中插入 Web 浏览器