如何在javascript中创建唯一数组
我有一个对象数组 我需要得到一个具有唯一网站名称和最新日期的数组 样本数据如何在javascript中创建唯一数组,javascript,node.js,arrays,Javascript,Node.js,Arrays,我有一个对象数组 我需要得到一个具有唯一网站名称和最新日期的数组 样本数据 "data" : [ { "position" : 2, "website" : "abc.com", "owned" : false, "date" : "2020-05-06", "dateTime" : ISODate("2020-05-06T00:00:00.000Z") }, { "position" : 3, "website" : "qwe.com
"data" : [
{
"position" : 2,
"website" : "abc.com",
"owned" : false,
"date" : "2020-05-06",
"dateTime" : ISODate("2020-05-06T00:00:00.000Z")
},
{
"position" : 3,
"website" : "qwe.com",
"owned" : false,
"date" : "2020-05-06",
"dateTime" : ISODate("2020-05-06T00:00:00.000Z")
},
{
"position" : 1,
"website" : "qwe.com",
"owned" : false,
"date" : "2020-04-06",
"dateTime" : ISODate("2020-04-06T00:00:00.000Z")
},
{
"position" : 6,
"website" : "xyz.agency",
"owned" : false,
"date" : "2020-05-06",
"dateTime" : ISODate("2020-05-06T00:00:00.000Z")
},
{
"position" : 4,
"website" : "opq.com",
"owned" : true,
"date" : "2020-05-06",
"dateTime" : ISODate("2020-05-06T00:00:00.000Z")
},
{
"position" : 2,
"website" : "opq.com",
"owned" : true,
"date" : "2020-05-06",
"dateTime" : ISODate("2020-05-06T00:00:00.000Z")
},
{
"position" : 4,
"website" : "opq.com",
"owned" : true,
"date" : "2020-04-01",
"dateTime" : ISODate("2020-04-01T00:00:00.000Z")
}
]
基于日期时间、位置和网站。需要MongoDB查询或Javascript代码
(日期时间和网站都可以,但位置太难了)
(提取具有最高日期和唯一网站名且排名靠前的对象)
预期反应
"data" : [
{
"position" : 2,
"website" : "abc.com",
"owned" : false,
"date" : "2020-05-06",
"dateTime" : ISODate("2020-05-06T00:00:00.000Z")
},
{
"position" : 3,
"website" : "qwe.com",
"owned" : false,
"date" : "2020-05-06",
"dateTime" : ISODate("2020-05-06T00:00:00.000Z")
},
{
"position" : 6,
"website" : "xyz.agency",
"owned" : false,
"date" : "2020-05-06",
"dateTime" : ISODate("2020-05-06T00:00:00.000Z")
},
{
"position" : 2,
"website" : "opq.com",
"owned" : true,
"date" : "2020-05-06",
"dateTime" : ISODate("2020-05-06T00:00:00.000Z")
}
],如果要从JS级别执行(警告!性能低下):
var maxDate={};//用于存储网站最新日期的临时变量
var网站=数据
.map(条目=>{
if((maxDate[entry.website]| | 0){
返回maxDate[entry.website]==entry.dateTime.getTime();
});
如果您想使用mongodb查询实现这一点:使用下面的实用程序,您可以用javascript实现所需的输出。希望这会有所帮助
const getUniqueWebsites=data=>{
返回数据。减少((结果,d)=>{
如果(结果[d.网站]){
if(新日期(结果[d.website].dateTime).getTime()<新日期(d.dateTime).getTime()){
结果[d.网站]=d;
}
else if(新日期(结果[d.website].dateTime).getTime()==新日期(d.dateTime).getTime()&&
(结果[d.website].position)>d.position){
结果[d.网站]=d;
}
}否则{
结果[d.网站]=d;
}
返回结果;
},{})
}
让数据=[
{
"立场":二,,
“网站”:“abc.com”,
“拥有”:假,
“日期”:“2020-05-06”,
“日期时间”:“2020-05-06T00:00:00.000Z”
},
{
“立场”:3,
“网站”:“qwe.com”,
“拥有”:假,
“日期”:“2020-05-06”,
“日期时间”:“2020-05-06T00:00:00.000Z”
},
{
"立场":一,,
“网站”:“qwe.com”,
“拥有”:假,
“日期”:“2020-04-06”,
“日期时间”:“2020-04-06T00:00:00.000Z”
},
{
“立场”:6,
“网站”:“xyz.agency”,
“拥有”:假,
“日期”:“2020-05-06”,
“日期时间”:“2020-05-06T00:00:00.000Z”
},
{
“立场”:4,
“网站”:“opq.com”,
“拥有”:没错,
“日期”:“2020-05-06”,
“日期时间”:“2020-05-06T00:00:00.000Z”
},
{
"立场":二,,
“网站”:“opq.com”,
“拥有”:没错,
“日期”:“2020-05-06”,
“日期时间”:“2020-05-06T00:00:00.000Z”
},
{
“立场”:4,
“网站”:“opq.com”,
“拥有”:没错,
“日期”:“2020-04-01”,
“日期时间”:“2020-04-01T00:00:00.000Z”
}
]
让结果=getUniqueWebsites(数据)
console.log(Object.values(result))