首页 > 解决方案 > 如何以这样的方式制作对象数组,使用户连续重复的对象形成一个新数组

问题描述

这是我的数组

  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"}

如果在行中找到用户,则该用户的数据应该是数据数组。谢谢你

标签: javascriptarraysobject

解决方案


对于每个数组元素

  • 如果用户属性与最后一个不同,或者如果没有最后一个,则将数组元素添加到输出
  • 如果用户相同,则将 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);


推荐阅读