[英]Flattening and Replacing Object Field in Lodash/Javascript
我有以下包含嵌套字段的数据。 我目前正在使用For循环来替换嵌套字段,但是看起来很陈旧。
我想从此将嵌套字段展平为name的键:
[{
"id": 1,
"name": Sally,
"country": {
"id": 1,
"name": "Chile"
},
"city": {
"id": 1,
"name": "Santiago"
},
"city-spot": {
"id": 1,
"name": "Downtown",
},
},
{
"id": 2,
"name": Tom,
"country": {
"id": 3,
"name": "Canada"
},
"city": {
"id": 2,
"name": "Vancouver"
},
"city-spot": {
"id": 5,
"name": "Downtown",
}
}
]
变成这个:
[{
"id": 1,
"name": Sally,
"country": "Chile",
"city": "Santiago",
"city-spot": "Downtown",
},
{
"id": 2,
"name": Tom,
"country": "Canada",
"city": "Vancouver",
"city-spot": "Downtown",
}
]
Array#map
将数组中的每个对象Array#map
到_.mapValues()
使其展平:
var data = [{"id":1,"name":"Sally","country":{"id":1,"name":"Chile"},"city":{"id":1,"name":"Santiago"},"city-spot":{"id":1,"name":"Downtown"}},{"id":2,"name":"Tom","country":{"id":3,"name":"Canada"},"city":{"id":2,"name":"Vancouver"},"city-spot":{"id":5,"name":"Downtown"}}]; var result = data.map(function(o) { return _.mapValues(o, function(value) { return _.get(value, 'name', value); // if name found in value return name, if not return value }); }); console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
你不需要lodash,下划线。 您可以使用Array#map来完成。
var data = [{
"id": 1,
"name": "Sally",
"country": {
"id": 1,
"name": "Chile"
},
"city": {
"id": 1,
"name": "Santiago"
},
"city-spot": {
"id": 1,
"name": "Downtown",
},
},
{
"id": 2,
"name": "Tom",
"country": {
"id": 3,
"name": "Canada"
},
"city": {
"id": 2,
"name": "Vancouver"
},
"city-spot": {
"id": 5,
"name": "Downtown",
}
}
];
//iterate to generate
var modData = data.map(function(d){
return {
"id": d.id,
"name": d.name,
"country": d.country.name,
"city": d.city.name,
"city-spot": d["city-spot"].name
}
});
console.log(modData);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.