使用javascript查找两个对象数组中的差异

find difference in two arrays of objects using javascript

本文关键字:数组 对象 两个 查找 javascript 使用      更新时间:2023-09-26

我有两个数组,其中包含一个"message"对象列表。每个消息对象都有一个属性"receivedTime"。

我可以按"receivedTime"对这两个数组进行排序,这样最新的消息就会排在第一位。

现在,使用underscorejs(如果适用)。。。有没有一种方法可以弹出两个数组中的差异?较新的数组将具有比原始列表更新的消息。

我只想要不在原始数组中的新消息。

对于某些上下文,我只能从API获取所有消息。所以我需要在计时器中继续这样做,并将任何新消息添加到页面上的表中(这部分我可以做到,我只需要列表中从一个调用到下一个调用的差异)。

接收时间的格式是什么?如果是时间戳,那么,保存上次收到的时间并查询列表以只筛选新的时间如何。

您可以使用纯javascript

var newones = items.filter( function(item){return (item.recievedTime>lastRecievedTime);} );

对两个数组进行排序后,将它们传递给for循环,并检查值是否在第二个数组中。

for(var i = 0; i < newMessages.length; i++) {
    if(Messages[i] == newMessages[i]) {
         newMessages.splice(i, 1);
    }
}

否则,查找Messages的长度,并删除newMessages数组中存在的元素数。

尝试使用filter,然后指定一个只返回不在原始数组中的函数,如下所示:

_.filter(newer_array, function(message) {
    return _.contains(older_array,message); 
});

或者,另一个选项是..对两个数组进行排序后,在"旧"数组中找到最新消息的receivedTime,然后在"新"数组中迭代,直到找到之前找到的receivedTime。沿着这些线。。。

var split = older[0].receivedTime
var difference = []
var i = 0
while(newer[i].receivedTime !== split) {
    difference.push(newer[i]);
}