Javascript: remove property "isSeen" foreach message (object) except the last message (having all messages the "isSeen" property to false except last)

huangapple go评论102阅读模式
英文:

Javascript: remove property "isSeen" foreach message (object) except the last message (having all messages the "isSeen" property to false except last)

问题

// 创建一个 JavaScript 函数,用于移除消息数组中一系列消息对象的“isSeen”属性,除了最后一个消息对象...

我尝试了一切但仍然出现错误和问题...
这是我想要实现的 UI 图像...

Javascript: remove property "isSeen" foreach message (object) except the last message (having all messages the "isSeen" property to false except last)

  1. // 目标:创建一个 JavaScript 函数,将消息数组转换为以下形式:
  2. [{
  3. isSeen: false, // 之前:是真的...
  4. id: 1,
  5. content: "Hello",
  6. createdAt: new Date(),
  7. user: {
  8. name: "John Doe",
  9. isOwner: false,
  10. },
  11. },
  12. {
  13. isSeen: false, // 之前:是真的...
  14. id: 1,
  15. content: "Do you know someone who can help?",
  16. createdAt: new Date(),
  17. user: {
  18. name: "John Doe",
  19. isOwner: false,
  20. },
  21. },
  22. {
  23. isSeen: true, // <-
  24. id: 1,
  25. content:
  26. "Do you know someone who can help?",
  27. createdAt: new Date(),
  28. user: {
  29. name: "John Doe",
  30. isOwner: false,
  31. },
  32. },
  33. {
  34. isSeen: false,
  35. id: 1,
  36. content: "No BRO!",
  37. createdAt: new Date(),
  38. user: {
  39. name: "Ramy Hadid",
  40. isOwner: true,
  41. },
  42. },
  43. {
  44. isSeen: true, // 在这里,设置为 true,因为这是由 Ramy 发送的最后一条消息...
  45. id: 1,
  46. content:
  47. "Stop asking me ridiculous questions, that's soo annoying, am starting to get annoyed of you, stop it!",
  48. createdAt: new Date(),
  49. user: {
  50. name: "Ramy Hadid",
  51. isOwner: true,
  52. },
  53. }]
英文:

// Make a javascript function that removes the "isSeen" property for every message object except the last one, of a sequence of messages in an array...

I've tried everything but kept getting bugs and errors...
Here is an image of the UI that i want to reach...

Javascript: remove property "isSeen" foreach message (object) except the last message (having all messages the "isSeen" property to false except last)

  1. // GOAL: make a javascript function that turns the messages array like this:
  2. [{
  3. isSeen: false, // before: it was true...
  4. id: 1,
  5. content: "Hello",
  6. createdAt: new Date(),
  7. user: {
  8. name: "John Doe",
  9. isOwner: false,
  10. },
  11. },
  12. {
  13. isSeen: false, // before: it was true...
  14. id: 1,
  15. content: "Do you know someone who can help?",
  16. createdAt: new Date(),
  17. user: {
  18. name: "John Doe",
  19. isOwner: false,
  20. },
  21. },
  22. {
  23. isSeen: true, // <-
  24. id: 1,
  25. content:
  26. "Do you know someone who can help?",
  27. createdAt: new Date(),
  28. user: {
  29. name: "John Doe",
  30. isOwner: false,
  31. },
  32. },
  33. {
  34. isSeen: false,
  35. id: 1,
  36. content: "No BRO!",
  37. createdAt: new Date(),
  38. user: {
  39. name: "Ramy Hadid",
  40. isOwner: true,
  41. },
  42. },
  43. {
  44. isSeen: true, // Here, it's set to true because it's the last message sent by Ramy...
  45. id: 1,
  46. content:
  47. "Stop asking me ridiculous questions, that's soo annoying, am starting to get annoyed of you, stop it!",
  48. createdAt: new Date(),
  49. user: {
  50. name: "Ramy Hadid",
  51. isOwner: true,
  52. },
  53. }]

答案1

得分: 0

  1. 我找到了解决方案经过了很长时间
  2. function splitArrayByOwner(arr) {
  3. const result = [];
  4. let tempArr = [];
  5. for (let i = 0; i < arr.length; i++) {
  6. if (tempArr.length === 0) {
  7. tempArr.push(arr[i]);
  8. } else if (tempArr[0].isOwner === arr[i].isOwner) {
  9. tempArr.push(arr[i]);
  10. } else {
  11. result.push(tempArr);
  12. tempArr = [arr[i]];
  13. }
  14. }
  15. if (tempArr.length > 0) {
  16. result.push(tempArr);
  17. }
  18. return result;
  19. }
  20. function joinArraysByOwner(arr) {
  21. const result = [];
  22. for (let i = 0; i < arr.length; i++) {
  23. result.push(...arr[i]);
  24. }
  25. return result;
  26. }
  27. messages = joinArraysByOwner(
  28. splitArrayByOwner(messages).map((sequence) => {
  29. sequence = sequence.map((message) => {
  30. message.isSeen = false;
  31. return message;
  32. });
  33. sequence[sequence.length - 1].isSeen = true;
  34. return sequence;
  35. })
  36. );
英文:

I found the solution, after a long time:

  1. function splitArrayByOwner(arr) {
  2. const result = [];
  3. let tempArr = [];
  4. for (let i = 0; i < arr.length; i++) {
  5. if (tempArr.length === 0) {
  6. tempArr.push(arr[i]);
  7. } else if (tempArr[0].isOwner === arr[i].isOwner) {
  8. tempArr.push(arr[i]);
  9. } else {
  10. result.push(tempArr);
  11. tempArr = [arr[i]];
  12. }
  13. }
  14. if (tempArr.length > 0) {
  15. result.push(tempArr);
  16. }
  17. return result;
  18. }
  19. function joinArraysByOwner(arr) {
  20. const result = [];
  21. for (let i = 0; i < arr.length; i++) {
  22. result.push(...arr[i]);
  23. }
  24. return result;
  25. }
  26. messages = joinArraysByOwner(
  27. splitArrayByOwner(messages).map((sequence) => {
  28. sequence = sequence.map((message) => {
  29. message.isSeen = false;
  30. return message;
  31. });
  32. sequence[sequence.length - 1].isSeen = true;
  33. return sequence;
  34. })
  35. );

In case somebody wants it Javascript: remove property "isSeen" foreach message (object) except the last message (having all messages the "isSeen" property to false except last)

huangapple
  • 本文由 发表于 2023年4月20日 04:18:55
  • 转载请务必保留本文链接:https://go.coder-hub.com/76058509.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定