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

使用javascript查找两个对象数组中的差异,javascript,arrays,underscore.js,Javascript,Arrays,Underscore.js,我有两个数组,其中包含“message”对象的列表。每个消息对象都有一个属性“receivedTime” 我可以按“receivedTime”对这两个数组进行排序,以便最新消息排在第一位 现在,使用下划线(如果适用的话)…有什么方法可以消除这两个数组中的差异吗?较新的阵列将具有比原始列表更新的消息 我只想要不在原始数组中的新消息 对于某些上下文,我只能从API获取所有消息。因此,我需要在计时器中继续这样做,并将任何新消息添加到页面上的表中(这部分我可以做,我只需要列表中从一个调用到下一个调用的差

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

我可以按“receivedTime”对这两个数组进行排序,以便最新消息排在第一位

现在,使用下划线(如果适用的话)…有什么方法可以消除这两个数组中的差异吗?较新的阵列将具有比原始列表更新的消息

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


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

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

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

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

尝试使用
过滤器,然后指定一个只返回原始数组中不包含的元素的函数,如下所示:

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

接收时间的格式是什么?若它是时间戳,那个么保存last ReceivedTime并查询列表以只过滤新的时间戳如何

您可以使用纯javascript

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

或者,另一种选择是。。对两个数组进行排序后,在“较旧”数组中找到最新消息的receivedTime,然后遍历“较新”数组,直到找到之前找到的receivedTime。沿着这条线的东西

var split = older[0].receivedTime
var difference = []

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

原始阵列是否始终是较新阵列的子集?这意味着新的数组只是在原始数组中添加了额外的元素吗?应该是。它可能包含不在新数组中的旧消息…那些我不关心的消息。