Javascript 根据阵列中的Id和日期获取最新版本
我有一个包含以下属性的javascript对象数组:Javascript 根据阵列中的Id和日期获取最新版本,javascript,arrays,mongodb,meteor,Javascript,Arrays,Mongodb,Meteor,我有一个包含以下属性的javascript对象数组:\u id、isVersionFrom、createdAt \u id,isVersionFrom存储了一个mongoDb\u id(当isVersionFrom是原始对象时为false)createdAt有一个来自历元的时间戳。 现在我想为每个\u id获取一个最新版本的数组 例如,如果我有这个数组: [ { _id:'CXsqvJ3ArwpM7aQwg', 创建日期:1493630867411, isVersionFrom:false }
\u id、isVersionFrom、createdAt
\u id,isVersionFrom
存储了一个mongoDb\u id(当isVersionFrom是原始对象时为false)createdAt
有一个来自历元的时间戳。
现在我想为每个\u id
获取一个最新版本的数组
例如,如果我有这个数组:
[
{
_id:'CXsqvJ3ArwpM7aQwg',
创建日期:1493630867411,
isVersionFrom:false
},
{
_id:'nnFthaqJ254BQozSp',
创建日期:1493630967411,
iVersionFrom:'CXsqvJ3ArwpM7aQwg'
},
{
_id:'JKSFE6AOF9HT8CW9',
创建日期:149361067411,
iVersionFrom:'CXsqvJ3ArwpM7aQwg'
},
{
_id:'HSitgQdFwYHqCjRax',
创建日期:149361067411,
isVersionFrom:false
},
{
_id:‘vhZZCKhyQgkNSGjqK’,
创建日期:1493631077411,
isVersionFrom:'HSitgQdFwYHqCjRax'
},
]
我想要这个结果:
[
{
_id:'JKSFE6AOF9HT8CW9',
创建日期:149361067411,
iVersionFrom:'CXsqvJ3ArwpM7aQwg'
},
{
_id:‘vhZZCKhyQgkNSGjqK’,
创建日期:1493631077411,
isVersionFrom:'HSitgQdFwYHqCjRax'
},
]
因此,它基本上必须过滤掉id的所有旧版本。使用下划线更新了可能的解决方案:
const myArray=[
{
_id:“CXsqvJ3ArwpM7aQwg”,
创建日期:1493630867411,
isVersionFrom:false
},
{
_id:“nnFthaqJ254BQozSp”,
创建日期:1493630967411,
iVersionFrom:“CXsqvJ3ArwpM7aQwg”
},
{
_id:“Jksfe6Aaof9hT8CW9”,
创建日期:149361067411,
iVersionFrom:“CXsqvJ3ArwpM7aQwg”
},
{
_id:“HSitgQdFwYHqCjRax”,
创建日期:149361067411,
isVersionFrom:false
},
{
_id:“vhZZCKhyQgkNSGjqK”,
创建日期:1493631077411,
iVersionFrom:“HSitgQdFwYHqCjRax”
}
];
//链接要无缝使用的下划线方法。
常量结果=u389;.chain(myArray)
//按isVersionFrom或原始id对项目进行分组。
.groupBy(item=>(!item.isVersionFrom?item.\u id:item.isVersionFrom))
//对于每组,取最新日期(最晚)的项目。
.map(val=>ux.max(val,item=>item.createdAt))
//获取链的价值。
.value();
嘿,拉米尔,好建议。唯一的问题是,当isVersionFrom为false且数组中没有其他版本时,我仍然需要isVersionFrom false对象,因为该对象是原始对象。@JoeriSmits这是否意味着,如果在isVersionFrom
中有某个元素具有字符串值,则还有一个元素具有相同的\u id
和isVersionFrom:false
?也就是说,对象是文件,第一个上载的文件具有isVersionFrom:false
在此文件之上上载的所有下一个文件都具有原始文件的isVersionFrom:id
谢谢。我已经基于您的第一个版本编写了一个解决方案,但是您更新的解决方案更干净。我真的应该学习下划线:)。