我有两个带有_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不变。
当前用户剩余的任何_id都应使用lastSeen of Date.now()推送到allUsersSeen上
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/