简体   繁体   English

如何使用lodash从JSON对象中删除键?

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

I've been trying to transform some data using lodash without success. 我一直在尝试使用lodash转换某些数据而没有成功。 I am really new to javascript and lodash. 我真的是JavaScript和lodash的新手。 How can I get the expected result? 如何获得预期的结果? I've used mapValues and chain , but I didn't achieve anything good. 我使用了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
        }
      ]
    }
  ]
};

Below is the expected result. 以下是预期结果。 I am trying to remove the dates which are outside the objects and arrays. 我试图删除对象和数组之外的日期。

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
    }
  ]
};

You don't really need lodash for this. 您实际上不需要lodash。 You can look at each key in your data and the just pull the values from each element of the array and concat it into a new array. 您可以查看数据中的每个键,然后只需从数组的每个元素中提取值并将其连接到新数组中即可。

 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) 

This starts with each key in your original object north and south . 这从原始对象north south每个键开始。 And for each one replaces the array with the accumulated values of each object in that array ignoring the keys. 并且对于每一个,忽略该键,用该数组中每个对象的累积值替换该数组。

alternatively you could just do this 或者你可以这样做

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

You can do any lodash quick operations, in pure JS way. 您可以使用纯JS方式进行任何lodash快速操作。 But, since you tagged lodash here is the version: 但是,由于您标记了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