Javascript 用Lodash处理JSON
使用此代码Javascript 用Lodash处理JSON,javascript,json,lodash,Javascript,Json,Lodash,使用此代码let result=u.groupBy(obj,'type')我有这个报税表: { "success": [{ "type": "success", "messages": "Assignment saved." }, { "type": "success", "messages": "Assignment saved." }, { "type": "success",
let result=u.groupBy(obj,'type')代码>我有这个报税表:
{
"success": [{
"type": "success",
"messages": "Assignment saved."
}, {
"type": "success",
"messages": "Assignment saved."
}, {
"type": "success",
"messages": "Assignment saved."
}]
}
但我需要转换成这样:
{
"error": ["Error msg", "Error 2 msg", "Error 3 msg"],
"notice": ["Notice 1 msg", "Notice 2 msg"],
"success": ["Success 1 msg", "Success 2 msg", "Success 3 msg"]
}
我应该在代码中做什么不同的事情
我缺少一些关于Lodash的配置 库并不总是要走的路:
function groupMessagesByType(数据输入){
让dataOut={}
对于(变量i=0;i
查看工作解决方案。
使用此解决方案,您不会被锁定到相同类型的消息
我用了。.groupBy
let list = [{type: "success", message: "msg1"},{type: "success", message: "msg2"},{type: "success", message: "msg3"},{type: "notice", message: "msg1"}, {type: "notice", message: "msg2"}, {type: "error", message: "msg1"}]
console.log("\n\n---------Full initial list of events");
console.log(list);
console.log("\n\n---------Events grouped by type");
console.log(_.groupBy(list, 'type'));
console.log("\n\n---------Your format");
let groups = _.groupBy(list, 'type')
let keys = Object.keys(groups);
for (let key of keys) {
groups[key] = groups[key].map(elem => elem.message)
}
console.log(groups);
问题中包含的代码令人困惑。像这样的
const result = _(obj)
.groupBy("type")
.mapValues(objs => objs.map(o => o.messages))
.value()
他们是按类型分组的,这并不是要修改objectsyeap,我需要找到一种方法来做。我需要groupBy
并额外调整我的return
以获得数组。但是我找不到任何关于如何使用groupBy
操作对象的文档
。因此,在输入对象中已经有一个名为success
的键,它是一个数组?或者这仅仅是groupBy的结果?同样,对于错误
,注意事项
,是否有单独的数组?或者一个数组中的所有数据和的名称。数组的关键是成功
(这很尴尬)。您能给我们看一下原始输入吗?您应该粘贴原始的obj
。此外,预期值显示其他对象中未显示的键和消息,这没有意义。谢谢,此解决方案有效。我也做了类似的事情,但我试图在这个案例中使用LoDash,但不可能,或者我遗漏了一些信息。再次感谢你,伙计。没有库你什么都可以做,但是如果使用它们让代码更具声明性(可能更短),使用众所周知的函数抽象(map、filter、sortBy等等),为什么不呢?你也可以使用.forOwn(groups,v=>v.map((v2,i,a)=>a[i]=v2.message))
@CoderPi:1)lodash加载在这个小提琴中了吗?,2)OP将消息
作为键,而不是消息
。