【问题标题】:Want to remove duplicate values from my json array in typescript [duplicate]想要从我的打字稿中的 json 数组中删除重复值 [重复]
【发布时间】:2018-07-09 06:11:51
【问题描述】:

想要从数组中删除重复项
我想删除其中之一。同样,当有多个重复项时,我只想保留第一个对象,因为我的数组按时间降序排序。

这是我的代码:

 chatlist   : [
      {
        "receiver": "Remya",
        "message": "hiiiii",
        "created": "2018-07-09T05:22:28.143Z"
      },
      {
        "sender": "Remya",
        "message": "hi",
        "created": "2018-07-07T10:35:08.919Z"
      },
      {
        "sender": "Mini",
        "message": "hi",
        "created": "2018-07-05T08:42:50.189Z"
      },
      {
        "sender": "Mini",
        "message": "hlo",
        "created": "2018-07-05T05:11:40.331Z"
      },
      {
        "receiver": "Mini",
        "message": "hi",
        "created": "2018-07-05T05:11:34.489Z"
      },
      {
        "receiver": "Maya",
        "message": "hlo",
        "created": "2018-07-04T05:23:35.650Z"
      },
      {
        "sender": "Maya",
        "message": "hi",
        "created": "2018-07-04T05:22:21.723Z"
      },
      {
        "sender": "Mini",
        "message": "hello",
        "created": "2018-07-04T05:20:06.341Z"
      },
      {
        "receiver": "Mini",
        "message": "hi",
        "created": "2018-07-04T05:19:32.964Z"
      }
    ]

我想要这样的输出:

    chatlist   : [
  {
    "receiver": "Remya",
    "message": "hiiiii",
    "created": "2018-07-09T05:22:28.143Z"
  },
{
    "sender": "Mini",
    "message": "hi",
    "created": "2018-07-05T08:42:50.189Z"
  },
{
    "receiver": "Maya",
    "message": "hlo",
    "created": "2018-07-04T05:23:35.650Z"
  }
]

我正在尝试执行我的聊天列表页面。所以我需要将我最近的聊天作为列表加载。

提前致谢

【问题讨论】:

  • 第一个数组中没有任何重复项。你能描述一下你的分组逻辑吗?例如,您的输出没有任何与 Remya 的发件人有关的内容,但您未过滤的却有...
  • 你说你只想保留每个接收者的第一次出现。时间戳重要吗?
  • 我只是从我的数组中删除我的用户名作为发送者或接收者,因为我只想显示我的联系人,例如谁是我连接的,谁连接我
  • 现在我需要按名称排序,例如它是在发送者还是接收者中
  • 非常感谢.......您的建议已解决

标签: arrays json typescript


【解决方案1】:

这是我的建议。

您遍历聊天列表 (data)。如果您找到了新的发送者或接收者,请将其记入两个列表之一(knownSendersknownReceivers),然后将聊天项目放入finalChatList。如果发送者或接收者重复,则聊天项将被忽略,因为过滤器方法返回一个长度大于 0 的列表。

let knownSenders = [];
let knownReceivers = [];
let finalChatList = [];
const data = JSON.parse(chatList);

data.forEach( element => {
    const sender = element.sender ? element.sender : null;
    const receiver = element.receiver ? element.receiver : null;

    if (sender) {
        if (knownSenders.filter( el => el.sender === sender).length <= 0) {
            // sender yet unknown
            knownSenders.push(sender);
            finalChatList.push(element);
        }
    } else if  (receiver) {
        if (knownReceivers.filter( el => el.receiver === receiver).length <= 0) {
            // receiver yet unknown
            knownReceivers.push(receiver);
            finalChatList.push(element);
        }
    }
});

【讨论】: