Javascript 给我数组中所有日期相同的元素,JS 请考虑以下数据: { post_views:[ { id:1, post_id:5, ip_address:"xxx", created_at:"2016-08-08T22:22:45+0000", updated_at:"2016-08-08T22:22:45+0000" }, { id:2, post_id:5, ip_address:"yyy", created_at:"2016-08-08T22:23:00+0000", updated_at:"2016-08-08T22:23:00+0000" }, ... ] }

Javascript 给我数组中所有日期相同的元素,JS 请考虑以下数据: { post_views:[ { id:1, post_id:5, ip_address:"xxx", created_at:"2016-08-08T22:22:45+0000", updated_at:"2016-08-08T22:22:45+0000" }, { id:2, post_id:5, ip_address:"yyy", created_at:"2016-08-08T22:23:00+0000", updated_at:"2016-08-08T22:23:00+0000" }, ... ] },javascript,lodash,Javascript,Lodash,如何获得所有匹配的元素:2016-08-08 你试过什么? 灰烬、过滤器: let datesThatMatch = filter(this.state.data.post_views, (views) => { return moment(views.created_at).format('MMMM Do YYYY') === moment(views.created_at).format('MMMM Do YYYY') }); console.log(datesT

如何获得所有匹配的元素:2016-08-08

你试过什么?

灰烬、过滤器:

  let datesThatMatch = filter(this.state.data.post_views, (views) => {
    return moment(views.created_at).format('MMMM Do YYYY') === moment(views.created_at).format('MMMM Do YYYY')
  });

  console.log(datesThatMatch);
我不在乎它们是在一天中的什么时候创建的,只要它们是在比赛中创建的

帮忙

更新
我刚刚意识到我的做法也完全错误,因为虽然我只向您展示了部分数据,但阵列中有数百个对象(如果不是数千个的话),目标是说,2016-08-08有16个匹配,x date有50个匹配,y日期的14个匹配项增加了此筛选器的复杂性。

根据您的更新,我认为groupBy是一个更好的选择:

var数据={
后视图:[
{  
id:1,
邮政编码:5,,
ip地址:“xxx”,
创建时间:“2016-08-08T22:22:45+0000”,
更新地址:“2016-08-08T22:22:45+0000”
},
{  
id:2,
邮政编码:5,,
ip_地址:“yyy”,
创建时间:“2016-08-08T22:23:00+0000”,
更新日期:“2016-08-08T22:23:00+0000”
},
{  
id:3,
邮政编码:5,,
ip_地址:“zzz”,
创建时间:“2016-08-12T20:15:00+0000”,
更新日期:“2016-08-12T21:20:00+0000”
},
]
}
让groupedDatesThatMatch=u.groupBy(data.post_视图,函数(视图){
返回时刻(views.created_at).format('MMMM Do YYYY')
});
console.log(groupedDatesThatMatch)

根据您的更新,我认为groupBy是一个更好的选择:

var数据={
后视图:[
{  
id:1,
邮政编码:5,,
ip地址:“xxx”,
创建时间:“2016-08-08T22:22:45+0000”,
更新地址:“2016-08-08T22:22:45+0000”
},
{  
id:2,
邮政编码:5,,
ip_地址:“yyy”,
创建时间:“2016-08-08T22:23:00+0000”,
更新日期:“2016-08-08T22:23:00+0000”
},
{  
id:3,
邮政编码:5,,
ip_地址:“zzz”,
创建时间:“2016-08-12T20:15:00+0000”,
更新日期:“2016-08-12T21:20:00+0000”
},
]
}
让groupedDatesThatMatch=u.groupBy(data.post_视图,函数(视图){
返回时刻(views.created_at).format('MMMM Do YYYY')
});
console.log(groupedDatesThatMatch)

您可以构建一个“反向查找表”(即,指示每个键出现的位置) 下面是一个示例演示

 var a = [1,1,2,3,4,5,6,6,7];                                                                                                                           
 var reverseIndex = new Map();
 a.every((cVal, i, a) => {
   var existing = reverseIndex.has(cVal) ? reverseIndex.get(cVal) : [];
   existing.push(i);
   reverseIndex.set(cVal, existing);
   return true;
 });

console.log(reverseIndex);
您可以构建一个“反向查找表”(即,指示每个键出现的位置) 下面是一个示例演示

 var a = [1,1,2,3,4,5,6,6,7];                                                                                                                           
 var reverseIndex = new Map();
 a.every((cVal, i, a) => {
   var existing = reverseIndex.has(cVal) ? reverseIndex.get(cVal) : [];
   existing.push(i);
   reverseIndex.set(cVal, existing);
   return true;
 });

console.log(reverseIndex);
那么

让post_视图=[
{  
id:1,
邮政编码:5,,
ip地址:“xxx”,
创建时间:“2016-08-08T22:22:45+0000”,
更新地址:“2016-08-08T22:22:45+0000”
},
{  
id:2,
邮政编码:5,,
ip_地址:“yyy”,
创建时间:“2016-08-08T22:23:00+0000”,
更新日期:“2016-08-08T22:23:00+0000”
}
]
let looking_for=新的RegExp('2016-08-08')
让result=post_views.filter(view=>looking_for.test(view.created_at)| looking_for.test(view.updated_at))
让summary=result.reduce((prev,view)=>{
让created_at=view.created_at.split('T')[0];
让updated_at=view.updated_at.split('T')[0];
prev.created_at[created_at]=prev.created_at[created_at]| 0;
上一次更新时间[更新时间]=上一次更新时间[更新时间]| 0;
上一个已创建位置[已创建位置]+;
上一个更新的位置[更新的位置]+;
返回上一个;
},{在:{}处创建,在:{}处更新)
控制台日志(结果);
控制台日志(摘要)那么

让post_视图=[
{  
id:1,
邮政编码:5,,
ip地址:“xxx”,
创建时间:“2016-08-08T22:22:45+0000”,
更新地址:“2016-08-08T22:22:45+0000”
},
{  
id:2,
邮政编码:5,,
ip_地址:“yyy”,
创建时间:“2016-08-08T22:23:00+0000”,
更新日期:“2016-08-08T22:23:00+0000”
}
]
let looking_for=新的RegExp('2016-08-08')
让result=post_views.filter(view=>looking_for.test(view.created_at)| looking_for.test(view.updated_at))
让summary=result.reduce((prev,view)=>{
让created_at=view.created_at.split('T')[0];
让updated_at=view.updated_at.split('T')[0];
prev.created_at[created_at]=prev.created_at[created_at]| 0;
上一次更新时间[更新时间]=上一次更新时间[更新时间]| 0;
上一个已创建位置[已创建位置]+;
上一个更新的位置[更新的位置]+;
返回上一个;
},{在:{}处创建,在:{}处更新)
控制台日志(结果);

控制台日志(摘要)经过一些欺骗,我设法想出了一个使用dateformat的解决方案,允许您轻松地动态定制日期。这不使用库,直接使用ES6。如果运行该代码段,您将看到日期匹配并已存储

const arr={
后视图:[
{  
id:1,
邮政编码:5,,
ip地址:“xxx”,
创建时间:“2016-08-08T22:22:45+0000”,
更新地址:“2016-08-08T22:22:45+0000”
},
{  
id:2,
邮政编码:5,,
ip_地址:“yyy”,
创建时间:“2016-08-08T22:23:00+0000”,
更新日期:“2016-08-08T22:23:00+0000”
},
{  
id:3,
邮政编码:5,,
ip_地址:“yyy”,
创建时间:“2016-08-09T22:23:00+0000”,
更新日期:“2016-08-08T22:23:00+0000”
},
]
}
const filterDate=新日期(2016年8月8日);
函数解析日期(日期){
const dateString=date.split(“T”)[0]。split('-');//只获取日期部分,然后split T