最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

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

IT培训 admin 3浏览 0评论

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

我有两个用户对象数组,其中包含_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 of 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中比较两个对象数组并根据id更新lastSeen

我有两个用户对象数组,其中包含_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 of 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") );
发布评论

评论列表 (0)

  1. 暂无评论