繁体   English   中英

Lodash / Java中的扁平化和替换对象字段

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM