使用javascript查找两个对象数组中的差异
我有两个数组,其中包含“message”对象的列表。每个消息对象都有一个属性“receivedTime” 我可以按“receivedTime”对这两个数组进行排序,以便最新消息排在第一位 现在,使用下划线(如果适用的话)…有什么方法可以消除这两个数组中的差异吗?较新的阵列将具有比原始列表更新的消息 我只想要不在原始数组中的新消息使用javascript查找两个对象数组中的差异,javascript,arrays,underscore.js,Javascript,Arrays,Underscore.js,我有两个数组,其中包含“message”对象的列表。每个消息对象都有一个属性“receivedTime” 我可以按“receivedTime”对这两个数组进行排序,以便最新消息排在第一位 现在,使用下划线(如果适用的话)…有什么方法可以消除这两个数组中的差异吗?较新的阵列将具有比原始列表更新的消息 我只想要不在原始数组中的新消息 对于某些上下文,我只能从API获取所有消息。因此,我需要在计时器中继续这样做,并将任何新消息添加到页面上的表中(这部分我可以做,我只需要列表中从一个调用到下一个调用的差
对于某些上下文,我只能从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]);
}
原始阵列是否始终是较新阵列的子集?这意味着新的数组只是在原始数组中添加了额外的元素吗?应该是。它可能包含不在新数组中的旧消息…那些我不关心的消息。