一种排除特定数组的方法

Posted

技术标签:

【中文标题】一种排除特定数组的方法【英文标题】:A way to exclude specific arrays 【发布时间】:2019-09-09 05:43:44 【问题描述】:

我有一个项目,我正在制作一个虚拟电话,我需要删除特定的数组 - 但我想不出办法。

目前我还没有找到方法来做到这一点,我考虑过这样做,我只能从数据库中获取特定信息,但在打开聊天消息时可能会出现“加载”问题。因此,我想从特定用户中提取所有聊天,然后在数组中删除

当它进入我的 jquery 时,我的数据将如下所示

var getmessages = [
       
            sender: "114-5437",
            receiver: "545-3169",
            sender_msg: "Hejsa!!!",
            receiver_read: 0,
            date: "2019-04-10 22:14:34"
        ,
        
            sender: "545-3169",
            receiver: "114-5437",
            sender_msg: "Hejsa!!!",
            receiver_read: 0,
            date: "2019-04-10 22:14:34"
        ,
        
            sender: "545-3169",
            receiver: "999-5435",
            sender_msg: "Hejsa!!!",
            receiver_read: 0,
            date: "2019-04-10 22:14:34"
        ,
        
            sender: "545-3169",
            receiver: "114-5437",
            sender_msg: "Hejsa!!!",
            receiver_read: 0,
            date: "2019-04-10 22:14:34"
        ,
    ];

$.each(getmessages, function () 
    );

所以我想在这里删除所有不是我需要的信息的数组

在这种情况下,我希望每个数组元素都有

发送者/接收者为 114-5437 和/或发送者/接收者为 545-3169

所以它应该在数组中看起来像这样

var getmessages = [
       
            sender: "114-5437",
            receiver: "545-3169",
            sender_msg: "Hejsa!!!",
            receiver_read: 0,
            date: "2019-04-10 22:14:34"
        ,
        
            sender: "545-3169",
            receiver: "114-5437",
            sender_msg: "Hejsa!!!",
            receiver_read: 0,
            date: "2019-04-10 22:14:34"
        ,
        
            sender: "545-3169",
            receiver: "114-5437",
            sender_msg: "Hejsa!!!",
            receiver_read: 0,
            date: "2019-04-10 22:14:34"
        ,
    ];

$.each(getmessages, function () 
    );

我希望我解释得很好并且有意义。谢谢

【问题讨论】:

如果使用$.each,该函数接受两个参数-indexvalueindex 是数组中对象的索引,而value 是对象本身。然后,您可以查看 value.sendervalue.receiver 并与您不需要的数字进行比较,如果其中一个匹配,则应删除该对象,例如 getmessages.splice(index, 1) 将其从数组中删除。 我明白了,我应该把 .splice 放在哪里?在 $.each 之前、之后还是在 $.each 中? :) 感谢您的快速回复 您可以保留senderreceiver 数字的数组/集合,然后通过$.each 与您的数组进行比较,并在循环中删除该索引。例如 - $.each(getmessages, function(index,value) if(setOfNumbers.has(getmessages[index].sender)) getmessages.splice(index,1) ); @ThomasMacédo 如果您使用过滤器,它将允许您缩小用例。它循环数组一次,因此它是一种在不更改基本数据集的情况下对数组进行转换的简单方法。 【参考方案1】:

这就是过滤器的用途

var getmessages = [
       
            sender: "114-5437",
            receiver: "545-3169",
            sender_msg: "Hejsa!!!",
            receiver_read: 0,
            date: "2019-04-10 22:14:34"
        ,
        
            sender: "545-3169",
            receiver: "114-5437",
            sender_msg: "Hejsa!!!",
            receiver_read: 0,
            date: "2019-04-10 22:14:34"
        ,
        
            sender: "545-3169",
            receiver: "999-5435",
            sender_msg: "Hejsa!!!",
            receiver_read: 0,
            date: "2019-04-10 22:14:34"
        ,
        
            sender: "545-3169",
            receiver: "114-5437",
            sender_msg: "Hejsa!!!",
            receiver_read: 0,
            date: "2019-04-10 22:14:34"
        ,
    ];

console.log(getmessages.filter(item => item.sender === '114-5437' || item.sender === '545-3169' || item.receiver === '114-5437' || item.receiver === '545-3169'));

【讨论】:

这就像一个魅力,以前没有用过。谢谢 :) 将对此进行更多研究 我建议您将要比较的字符串定义为数组。这样它就可以以干净的方式扩展。然后你可以使用:arr.includes(item.sender);

以上是关于一种排除特定数组的方法的主要内容,如果未能解决你的问题,请参考以下文章

我需要从角度应用程序的特定路径中排除样式表 [重复]

如何从 Rails 中的查询中排除 id 数组(使用 ActiveRecord)?

Magento:从最低订单金额中排除类别

[引用数组的多个值时,使用Python列表理解排除重复项

在 servlet 过滤器中排除特定 URL

Android App Links - 排除特定子目录