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