簡體   English   中英

熱愛使用lodash展平嵌套的對象數組嗎?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM