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

时间:2013-09-05 05:51:19

标签: javascript arrays underscore.js

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

我可以通过'receivedTime'对两个数组进行排序,以便最新的消息是第一个。

现在,使用underscorejs(如果适用)...有没有办法可以突破两个数组的差异?较新的数组将包含比原始列表更新的消息。

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

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

4 个答案:

答案 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]);
}