javascript - 比较两个对象数组并根据 Javascript 中的 id 更新lastSeen

标签 javascript arrays node.js mongodb object

我有两个用户对象数组,分别为 _id 和 lastSeen。

allUsersSeen = [
   {_id: '12csdf', lastSeen: 212512},
   {_id: '232csdf', lastSeen: 34345},
   {_id: '1253csdf', lastSeen: 6346453},
   {_id: '772csfddf', lastSeen: 2345345}
]

currentUsersSeen = [
   {_id: '12csdf', lastSeen: Date.now()},
   {_id: '1253csdf', lastSeen: Date.now()},
   {_id: '1fsdf', lastSeen: Date.now()}
]

我想比较这两个数组,如果 allUsersSeen _id 与 currentUsersSeen 匹配,我想将 lastSeen 更新为 Date.now()。所有其他_id 将保持其lastSeen 的原样。

currentUsersSeen 中任何剩余的 _id 都应该被推送到 allUsersSeen 上,并且 lastSeen 为 Date.now()

allUsersSeen 的最终数组应如下所示:

allUsersSeen = [
   {_id: '12csdf', lastSeen: Date.now()},
   {_id: '232csdf', lastSeen: 34345},
   {_id: '1253csdf', lastSeen: Date.now()},
   {_id: '772csfddf', lastSeen: 2345345},
   {_id: '1fsdf', lastSeen: Date.now()}
]

显然,Date.now() 将是当前日期/时间。 我该怎么做呢? 我尝试过使用嵌套的 for 循环,并尝试使用 forEach() 和 map()。

任何帮助将不胜感激。 谢谢。

最佳答案

尝试这样,

allUsersSeen = [
        {_id: '12csdf', lastSeen: 212512},
        {_id: '232csdf', lastSeen: 34345},
        {_id: '1253csdf', lastSeen: 6346453},
        {_id: '772csfddf', lastSeen: 2345345}
    ];

    currentUsersSeen = [
        {_id: '12csdf', lastSeen: Date.now()},
        {_id: '1253csdf', lastSeen: Date.now()},
        {_id: '1fsdf', lastSeen: Date.now()}
    ];

    function merge(a, b, prop){
        var reduced =  a.filter( a_item => ! b.find ( b_item => a_item[prop] === b_item[prop]) )
        return reduced.concat(b);
    }
    console.log( merge(allUsersSeen, currentUsersSeen, "_id") );

关于javascript - 比较两个对象数组并根据 Javascript 中的 id 更新lastSeen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47939838/

相关文章:

javascript - 如何在异步库的 "Each"函数中定义回调?

javascript - 已部署的图像共享

你能在堆栈上定义一个数组并将指针传递给全局变量吗?

javascript - 从数组中删除所有不偶数的值

node.js - 如何在 Redis key 过期时收到通知?

javascript - 封闭件损坏 - 请帮我修复它

javascript - 使用 React 动态创建大表

javascript - 如果关联数组从正则表达式返回,则它是排序索引

javascript - 函数等待查询结果

javascript - Jest expect.objectContaining() 在 expect.toHaveBennCalled() 中失败