используя этот код let result = _.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, которую я пропускаю?
Взгляните на эту скрипку для рабочего решения. С помощью этого решения вы не блокируете одно и то же сообщение.
Ive использовал _.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);
_.forOwn(groups, v => v.map((v2,i,a) => a[i] = v2.message))
Код, включенный в вопрос, запутан. Что-то вроде этого?
const result = _(obj)
.groupBy("type")
.mapValues(objs => objs.map(o => o.messages))
.value()
messages
качестве ключа, а не message
.
Библиотеки - это не всегда путь:
function groupMessagesByType(dataIn) {
let dataOut = {}
for(var i = 0; i < dataIn.length; ++i) {
var type = dataIn[i].type
if(typeof dataOut[type] == "undefined") {
dataOut[type] = []
}
dataOut[type].push(dataIn[i].messages)
}
return dataOut
}
// Example:
var data = [{
"type": "success",
"messages": "Assignment saved."
}, {
"type": "success",
"messages": "Assignment saved."
}, {
"type": "error",
"messages": "Error msg."
}]
console.log(groupMessagesByType(data))