Javascript:删除除最后一条消息之外的每个消息(对象)的属性“isSeen”(将所有消息的“isSeen”属性设置为 false,除了最后一条)

问题描述 投票:0回答:1

// 创建一个 javascript 函数,删除数组中消息序列中除最后一个消息对象之外的每个消息对象的“isSeen”属性...

我已经尝试了一切,但不断出现错误和错误...... 这是我想要达到的用户界面的图像......

Image:


// GOAL: make a javascript function that turns the messages array like this:

[{
      isSeen: false, // before: it was true...
      id: 1,
      content: "Hello",
      createdAt: new Date(),
      user: {
        name: "John Doe",
        isOwner: false,
      },
    },
    {
      isSeen: false, // before: it was true...
      id: 1,
      content: "Do you know someone who can help?",
      createdAt: new Date(),
      user: {
        name: "John Doe",
        isOwner: false,
      },
    },
    {
      isSeen: true, // <-
      id: 1,
      content:
        "Do you know someone who can help?",
      createdAt: new Date(),
      user: {
        name: "John Doe",
        isOwner: false,
      },
    },
    {
      isSeen: false,
      id: 1,
      content: "No BRO!",
      createdAt: new Date(),
      user: {
        name: "Ramy Hadid",
        isOwner: true,
      },
    },
    {
      isSeen: true,  // Here, it's set to true because it's the last message sent by Ramy...
      id: 1,
      content:
        "Stop asking me ridiculous questions, that's soo annoying, am starting to get annoyed of you, stop it!",
      createdAt: new Date(),
      user: {
        name: "Ramy Hadid",
        isOwner: true,
      },
    }]
javascript arrays object user-interface message
1个回答
0
投票

我找到了解决方案,经过很长时间:

function splitArrayByOwner(arr) {
    const result = [];
    let tempArr = [];

    for (let i = 0; i < arr.length; i++) {
      if (tempArr.length === 0) {
        tempArr.push(arr[i]);
      } else if (tempArr[0].isOwner === arr[i].isOwner) {
        tempArr.push(arr[i]);
      } else {
        result.push(tempArr);
        tempArr = [arr[i]];
      }
    }

    if (tempArr.length > 0) {
      result.push(tempArr);
    }

    return result;
  }

  function joinArraysByOwner(arr) {
    const result = [];

    for (let i = 0; i < arr.length; i++) {
      result.push(...arr[i]);
    }

    return result;
  }

  messages = joinArraysByOwner(
    splitArrayByOwner(messages).map((sequence) => {
      sequence = sequence.map((message) => {
        message.isSeen = false;
        return message;
      });

      sequence[sequence.length - 1].isSeen = true;
      return sequence;
    })
  );

万一有人想要它:)

© www.soinside.com 2019 - 2024. All rights reserved.