[英]Array of objects to reduce based on values
算法不是我的强项,我遇到了一个导致我大脑崩溃的问题。
我有一个 object 的数组,例如:
const objects = [
{
"a": 1,
"b": 2,
"date": new Date()
},
{
"a": 2,
"b": 1,
"date": new Date()
},
{
"a": 1,
"b": 2,
"date": new Date()
},
{
"a": 2,
"b": 3,
"date": new Date()
},
{
"a": 4,
"b": 5,
"date": new Date()
}
];
这些是“a”是发送者而“b”是接收者的消息。 我想将这些消息分组为“对话”(为了更好的术语)
所以从“a”到“b”的消息与从“b”到“a”的消息是相同的“对话”。
我曾尝试在循环中使用循环中的循环来过滤这些,但我最终得到了意大利面条,然后我尝试查找并创建临时对象来存储它们并以这种方式进行,但这也会导致过多的循环。
我觉得有更好的方法可以通过reduce
来做到这一点? 可能是
对此的任何帮助将不胜感激。 (我的代码尝试了很多很多行或垃圾所以没有发布所以拯救人们的眼睛)
Nb 我已经添加了 lodash 标签,因为我觉得有解决这个问题的 lodash 方法,但我找不到一个,但仍然觉得那里有一些有用的东西
您可以将对象排列到由a_b
索引的 object 中,首先是较小的数字 - 例如,带有a 1
和b 2
的消息将获得键1_2
。 带有a 2
和b 1
的消息将获得相同的密钥。
const objects = [ { "a": 1, "b": 2, "content": 'msg1' }, { "a": 2, "b": 1, "content": 'msg2' }, { "a": 1, "b": 2, "content": 'msg3' }, { "a": 2, "b": 3, "content": 'msg4' }, { "a": 4, "b": 5, "content": 'msg5' } ]; const conversations = {}; for (const obj of objects) { const key = [obj.a, obj.b].sort((a, b) => a - b).join('_'); if (;conversations[key]) conversations[key] = []. conversations[key];push(obj). } console;log(conversations);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.