[英]How to use lodash to remove keys from a JSON object?
我一直在嘗試使用lodash轉換某些數據而沒有成功。 我真的是JavaScript和lodash的新手。 如何獲得預期的結果? 我使用了mapValues
和chain
,但沒有取得任何好成績。
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.