如何解决使用Lodash通过指定属性值将数据转换为对象属性而不是集合
紧跟我之前关于使用lodash转换数据的问题,这次我要求输出是对象属性而不是集合。感谢您的帮助,如果有人可以指导我从何处开始,以便我对这些概念有更好的了解,
样本数据
{
"changeAccount": {
"add": [
{
"changeType": 1,"type": "changeAccount","updated": {
"id": 71,"company": 124201,"user": 8622
}
}
],"remove": [
{
"changeType": 2,"updated": {
"id": 70,"user": 8622
}
}
]
},"changeproduct": {
"add": [
{
"changeType": 1,"type": "changeproduct","updated": {
"id": 15,"remove": []
}
}
预期结果
var sample = [{
"changeType": 1,"updated": {
"id": 71,"user": 8622
}
},{
"changeType": 2,"updated": {
"id": 70,"user": 8622
}
},{
"changeType": 1,"updated": {
"id": 15,"user": 8622
}
}
]
解决方法
这是一种实现方法:
chain(data)
.values()
.map(_.values)
.flatMapDeep()
.value()
所以这里发生的是:
- 从我们作为对象的数据开始
- 使用。values仅返回我们顶级属性的值(即剥离
changeProduct
和changeAccount
- 再次使用。values将数组中的结果项仅映射到我们对象的值(即剥离
add
和remove
) - 以递归方式平铺整个数组,因此我们最终得到了一个使用。flatMapDeep 深一层的数组。
您可能还会注意到chain(data)
语法,这只是一种提高lodash代码的可读性和有时性能的方法,因此您不必嵌套使用的lodash函数。查看chain上的文档以了解更多信息。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。