[英]Hot to flatten nested array of objects using lodash?
我有一個需要使用lodash在javascript中轉換的json對象:
{
"BidNumber": 2,
"BidResult": 1,
"BidAmount": "6756",
"BidData": [
{
"name": "JonSnow",
"Data": "Standard data for Jon Snow"
},
{
"LineNum": "HarryPotter",
"Data": "Standard data for Jon Snow"
},
{
"LineNum": "MickyMouse",
"Data": "Standard data for Micky Mouse"
}
],
"BidReference": "22e06e66-e711-bd14-7874a-002219649f24"
}
我想將其轉換為:
{
"bidNumber": 2,
"bidResult": 1,
"bidAmount": "6756",
"bidData": {
"jonSnow": "Standard data for Jon Snow",
"harryPotter": "Standard data for Jon Snow",
"mickyMouse": "Standard data for Micky Mouse"
},
"bidReference": "22e06e66-e711-bd14-7874a-002219649f24"
}
無法弄清楚我在lodash中的處理方式(包括camelCase部分)
可以很容易地用JS完成。
data.BidData = Object.assign({}, ...data.BidData.map(el => {
return { [(el.name ? el.name : el.LineNum)]: el.Data }
}));
您不需要使用loadash,除非您想使用_.extend
var data = { "BidNumber": 2, "BidResult": 1, "BidAmount": "6756", "BidData": [ { "name": "JonSnow", "Data": "Standard data for Jon Snow" }, { "LineNum": "HarryPotter", "Data": "Standard data for Jon Snow" }, { "LineNum": "MickyMouse", "Data": "Standard data for Micky Mouse" } ], "BidReference": "22e06e66-e711-bd14-7874a-002219649f24" }; data.BidData = Object.assign({}, ...data.BidData.map(el => { return { [jslcfirst(el.name ? el.name : el.LineNum)]: el.Data } })); console.log(data); function jslcfirst(string) { return string.charAt(0).toLowerCase() + string.slice(1); }
使用Lodash:
obj.BidData = _.reduce(obj.BidData, function(flatObj, item) {
flatObj[_.camelCase(item.name || item.LineNum)] = item.Data;
return flatObj;
},{});
但是您不一定需要lodash(下划線),使用香草JS可以輕松實現
function convertToCamelCase(string) {
return string.charAt(0).toLowerCase() + string.slice(1);
}
obj.BidData = obj.BidData.reduce(function(flatObj, item) {
flatObj[convertToCamelCase(item.name || item.LineNum)] = item.Data;
return flatObj;
},{})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.