javascript - 如何以这样的方式制作对象数组,使用户连续重复的对象形成一个新数组
问题描述
这是我的数组
myObject = [
{data: "sdhfjd", id: 1604812217822, user: "dsfjkhjkdh", userLogo: "jhjkahdsfj"},
{data: "dsgsdfgsdf", id: 1604812219627, user: "dsfjkhjkdh", userLogo: "jhjkahdsfj"},
{data: "fdg", id: 1604812220204, user: "dsfjkhjkdh", userLogo: "jhjkahdsfj"},
{data: "dfg", id: 1604812220601, user: "newUser", userLogo: "jhjkahdsfj"},
{data: "df", id: 1604812220862, user: "dsfjkhjkdh", userLogo: "jhjkahdsfj"},
{data: "g", id: 1604812221223, user: "newUser", userLogo: "jhjkahdsfj"},
{data: "g", id: 1604812221530, user: "dsfjkhjkdh", userLogo: "jhjkahdsfj"},
]
我想遍历数组并在遍历它时找到普通用户。如果用户在迭代中重复,则用户必须在一个对象中,例如:- 在迭代时,如果在一行中找到相同的用户,则该对象应包含该用户数据的 arraj
预期输出:-
{data: ["sdhfjd" , "dsgsdfgsdf","fdg"] , id: 1604812217822, user: "dsfjkhjkdh", userLogo: "jhjkahdsfj"}
{data: "dfg", id: 1604812220601, user: "newUser", userLogo: "jhjkahdsfj"}
{data: "df", id: 1604812220862, user: "dsfjkhjkdh", userLogo: "jhjkahdsfj"}
{data: "g", id: 1604812221223, user: "newUser", userLogo: "jhjkahdsfj"}
{data: "g", id: 1604812221530, user: "dsfjkhjkdh", userLogo: "jhjkahdsfj"}
如果在行中找到用户,则该用户的数据应该是数据数组。谢谢你
解决方案
对于每个数组元素
- 如果用户属性与最后一个不同,或者如果没有最后一个,则将数组元素添加到输出
- 如果用户相同,则将 data 属性添加到最后一个元素的数据数组中(如果当前是字符串,则将其添加到数组中)
const myArray = [
{data: "sdhfjd", id: 1604812217822, user: "dsfjkhjkdh", userLogo: "jhjkahdsfj"},
{data: "dsgsdfgsdf", id: 1604812219627, user: "dsfjkhjkdh", userLogo: "jhjkahdsfj"},
{data: "fdg", id: 1604812220204, user: "dsfjkhjkdh", userLogo: "jhjkahdsfj"},
{data: "dfg", id: 1604812220601, user: "newUser", userLogo: "jhjkahdsfj"},
{data: "df", id: 1604812220862, user: "dsfjkhjkdh", userLogo: "jhjkahdsfj"},
{data: "g", id: 1604812221223, user: "newUser", userLogo: "jhjkahdsfj"},
{data: "g", id: 1604812221530, user: "dsfjkhjkdh", userLogo: "jhjkahdsfj"},
];
let currentUser = "";
const output = [];
for (el of myArray) {
if (el.user !== currentUser) {
output.push(el);
currentUser = el.user;
} else {
const last = output[output.length - 1];
if (typeof last.data === "string") {
last.data = [last.data];
}
last.data.push(el.data);
}
}
console.log(output);
推荐阅读
- javascript - 如何在 Puppeteer 中运行 page.screenshot 内部 page.evaluate?
- processing - FSL dtifit(不同数量的 bvec 和 bval 条目)
- r - 如何从文件中导入保存的鼠标/中间对象
- javascript - 拖放行的父元素为空
- gmail - “UnhandledPromiseRejectionWarning:错误:未设置刷新令牌。” 尝试使用 gmail API 使用 digitalocean 部署节点应用程序时
- data-structures - 您如何保持普通二叉树(不是 BST)的平衡?
- java - 无法运行用于创建随机数列表的代码
- python - 合并两个数据框并使用其中一个 dfs 的索引
- mongodb - 从 mongodb 转储中获取数据集
- angular - 下拉字段无限期地使用 API 调用调用函数