簡體   English   中英

如何使用lodash從JSON對象中刪除鍵?

[英]How to use lodash to remove keys from a JSON object?

我一直在嘗試使用lodash轉換某些數據而沒有成功。 我真的是JavaScript和lodash的新手。 如何獲得預期的結果? 我使用了mapValueschain ,但沒有取得任何好成績。

const data = {
  "north": [
    {
      "2018-07-01": {
        "date": "2018-07-01",
        "name": "david",
        "age": 11
      },
      "2018-07-02": {
        "date": "2018-07-02",
        "name": "damo",
        "age": 16
      },
      "2018-07-03": {
        "date": "2018-07-03",
        "name": "dani",
        "age": 12
      }
    }
  ],
  "south": [
    {
      "2018-07-01": [
        {
          "fruit": "banana",
          "date": "2018-07-01",
          "name": "miller",
          "age": 11
        },
        {
          "fruit": "mango",
          "date": "2018-07-01",
          "name": "mano",
          "age": 11
        },
        {
          "fruit": "avocado",
          "date": "2018-07-01",
          "name": "karl",
          "age": 14
        }
      ],
      "2018-07-02": [
        {
          "fruit": "pineaplle",
          "date": "2018-07-02",
          "name": "gautier",
          "age": 12
        },
        {
          "fruit": "apple",
          "date": "2018-07-02",
          "name": "gauteng",
          "age": 9
        },
        {
          "fruit": "watermelon",
          "date": "2018-07-02",
          "name": "garzier",
          "age": 12
        }
      ]
    }
  ]
};

以下是預期結果。 我試圖刪除對象和數組之外的日期。

const expectedData = {
  "north": [
    {
      "date": "2018-07-01",
      "name": "david",
      "age": 11
    },
    {
      "date": "2018-07-02",
      "name": "damo",
      "age": 16
    },
    {
      "date": "2018-07-03",
      "name": "dani",
      "age": 12
    }
  ],
  "south": [
    {
      "fruit": "banana",
      "date": "2018-07-01",
      "name": "miller",
      "age": 11
    },
    {
      "fruit": "mango",
      "date": "2018-07-01",
      "name": "mano",
      "age": 11
    },
    {
      "fruit": "avocado",
      "date": "2018-07-01",
      "name": "karl",
      "age": 14
    },
    {
      "fruit": "pineaplle",
      "date": "2018-07-02",
      "name": "gautier",
      "age": 12
    },
    {
      "fruit": "apple",
      "date": "2018-07-02",
      "name": "gauteng",
      "age": 9
    },
    {
      "fruit": "watermelon",
      "date": "2018-07-02",
      "name": "garzier",
      "age": 12
    }
  ]
};

您實際上不需要lodash。 您可以查看數據中的每個鍵,然后只需從數組的每個元素中提取值並將其連接到新數組中即可。

 const data = {"north": [{"2018-07-01": {"date": "2018-07-01","name": "david","age": 11},"2018-07-02": {"date": "2018-07-02","name": "damo","age": 16},"2018-07-03": {"date": "2018-07-03","name": "dani","age": 12}}],"south": [{"2018-07-01": [{"fruit": "banana","date": "2018-07-01","name": "miller","age": 11},{"fruit": "mango","date": "2018-07-01","name": "mano","age": 11},{"fruit": "avocado","date": "2018-07-01","name": "karl","age": 14}],"2018-07-02": [{"fruit": "pineaplle","date": "2018-07-02","name": "gautier","age": 12},{"fruit": "apple","date": "2018-07-02","name": "gauteng","age": 9},{"fruit": "watermelon","date": "2018-07-02","name": "garzier","age": 12}]}]}; Object.keys(data).forEach(k => { data[k] = data[k].reduce((a, c) => a.concat(...Object.values(c)), []) }) console.log(data) 

這從原始對象north south每個鍵開始。 並且對於每一個,忽略該鍵,用該數組中每個對象的累積值替換該數組。

或者你可以這樣做

const expectedData = {
    north: Object.values(data.north[0]),
    south: Object.values(data.south[0])
}

您可以使用純JS方式進行任何lodash快速操作。 但是,由於您標記了lodash ,所以這里是版本:

_.mapValues(data, v => _.flatMapDeep(v, _.values))

 var data = { "north": [ { "2018-07-01": { "date": "2018-07-01", "name": "david", "age": 11 }, "2018-07-02": { "date": "2018-07-02", "name": "damo", "age": 16 }, "2018-07-03": { "date": "2018-07-03", "name": "dani", "age": 12 } } ], "south": [ { "2018-07-01": [ { "fruit": "banana", "date": "2018-07-01", "name": "miller", "age": 11 }, { "fruit": "mango", "date": "2018-07-01", "name": "mano", "age": 11 }, { "fruit": "avocado", "date": "2018-07-01", "name": "karl", "age": 14 } ], "2018-07-02": [ { "fruit": "pineaplle", "date": "2018-07-02", "name": "gautier", "age": 12 }, { "fruit": "apple", "date": "2018-07-02", "name": "gauteng", "age": 9 }, { "fruit": "watermelon", "date": "2018-07-02", "name": "garzier", "age": 12 } ] } ] }; var expectedData = _.mapValues(data, v => _.flatMapDeep(v, _.values)); console.log(expectedData); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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