我有两个包含“消息”对象列表的数组。每个消息对象都有一个属性'receivedTime'。
我可以通过'receivedTime'对两个数组进行排序,以便最新的消息是第一个。
现在,使用underscorejs(如果适用)...有没有办法可以突破两个数组的差异?较新的数组将包含比原始列表更新的消息。
我只想要不在原始数组中的新消息。
对于某些上下文,我只能从API获取所有消息。所以我需要在计时器中继续这样做,并在页面上的表中添加任何新消息(这部分我可以做,我只需要从一个调用到下一个调用的列表中的差异)。
答案 0 :(得分:2)
recievedTime的格式是什么?如果它是时间戳,那么如何保存最后收到的时间和查询列表以仅过滤新的。
您可以使用纯javascript
var newones = items.filter( function(item){return (item.recievedTime>lastRecievedTime);} );
答案 1 :(得分:0)
对两个数组进行排序后,将它们传递给for循环并检查值是否在第二个数组中。
for(var i = 0; i < newMessages.length; i++) {
if(Messages[i] == newMessages[i]) {
newMessages.splice(i, 1);
}
}
否则找到Messages的长度并删除newMessages数组中存在的元素数。
答案 2 :(得分:0)
尝试使用filter
,然后指定一个只返回原始数组中不存在的函数的函数,其中包含以下内容:
_.filter(newer_array, function(message) {
return _.contains(older_array,message);
});
答案 3 :(得分:0)
或者,另一个选项是......在对两个数组进行排序后,在“较旧”数组中找到最新消息的receivedTime,然后遍历“较新”数组,直到找到之前找到的receiveTime。这些方面的东西......
var split = older[0].receivedTime
var difference = []
var i = 0
while(newer[i].receivedTime !== split) {
difference.push(newer[i]);
}