Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中按字符串属性值对对象数组进行分组?_Javascript_Ecmascript 6 - Fatal编程技术网

在JavaScript中按字符串属性值对对象数组进行分组?

在JavaScript中按字符串属性值对对象数组进行分组?,javascript,ecmascript-6,Javascript,Ecmascript 6,我讨厌这种对象数组,每个对象都有一个日期,我希望能够将这些对象分组为几个月。有没有办法转换这个 var data = [ { date: "2016-08-13",...}, { date: "2016-07-23",...}, { date: "2016-08-11",...}, { date: "2016-08-10",...}, { date: "2016-07-20",...}, { date: "2016-07-21",...}, ] 像这样的事情 var

我讨厌这种对象数组,每个对象都有一个日期,我希望能够将这些对象分组为几个月。有没有办法转换这个

var data  = [
  { date: "2016-08-13",...},
  { date: "2016-07-23",...},
  { date: "2016-08-11",...},
  { date: "2016-08-10",...},
  { date: "2016-07-20",...},
  { date: "2016-07-21",...},
]
像这样的事情

var data  = [
  [{ date: "2016-08-13",...},
  { date: "2016-08-11",...},
  { date: "2016-08-10",...}],
  [{ date: "2016-07-20",...},
  { date: "2016-07-21",...},
  { date: "2016-07-23",...}[
]

您可以在哈希表中获取年和月组字符串的一部分,并为每个组获取一个新数组,然后将该数组放入结果集中

var数据=[{日期:“2016-08-13”},{日期:“2016-07-23”},{日期:“2016-08-11”},{日期:“2016-08-10”},{日期:“2016-07-20”},{日期:“2016-07-21”},
hash=Object.create(null),
结果=[];
data.forEach(函数(o){
var key=o.date.slice(0,7);
如果(!哈希[键]){
哈希[键]=[];
push(hash[key]);
}
hash[key].push(o);
});
控制台日志(结果)
.as控制台包装{最大高度:100%!重要;顶部:0;}
var数据=[
{日期:“2016-08-13”},
{日期:“2016-07-23”},
{日期:“2016-08-11”},
{日期:“2016-08-10”},
{日期:“2016-07-20”},
{日期:“2016-07-21”},
];
数据排序(函数(a,b){
var aDate=新日期(a.日期);
var b日期=新日期(b日期);
返回bDate-aDate;
});
控制台日志(数据)
您可以使用
数组#reduce
根据月份对对象进行分组

var数据=[{date:“2016-08-13”}、{date:“2016-07-23”}、{date:“2016-08-11”}、{date:“2016-08-10”}、{date:“2016-07-20”}、{date:“2016-07-21”}];
var结果=数据减少((res,obj)=>{
让[年、月、日]=对象日期分割('-');
如果(res[月])
res【月】。推送(obj);
其他的
res[月]=[目标];
返回res;
},{});
console.log(Object.values(result))
.as控制台包装{最大高度:100%!重要;顶部:0;}
按月分组:

var groupedData = [];

for(i=0;i<12;i++)
   groupedData.push([]);

for(var index = 0;index<data.length;index++){
   var date = new Date(data[index].date);
   groupedData[date.getMonth()] = data[index];
}
var groupedData=[];

对于(i=0;i可能重复Why
hash=Object.create(null),
而不是
hash={}
@mplungjan,它会生成一个没有原型的空对象,比如
toString
(如果这是hash的一个值,在检查时它可能是
true
,但ist不支持数组)我明白了。这是一个新的。它比
{}
var data  = [
{ date: "2016-08-13"},
{ date: "2016-07-23"},
{ date: "2016-08-11"},
{ date: "2016-08-10"},
{ date: "2016-07-20"},
{ date: "2016-07-21"}
];

var monthDateIndex = {
 "01": "Jan",
 "02" : "Feb",
 "03" : "mar",
 "04" : "april",
 "05" : "may",
 "06" : "june",
 "07" : "july",
 "08" : "august",
 "09" : "sept",
 "10" : "oct",
 "11" : "nov",
 "12" : "dec"
}

let newDataObj = [];
Object.keys(monthDateIndex).map(monthNum => {
        let monthObj = [];
   data.map(dateObj => {   
       if(monthNum == dateObj.date.split("-")[1]) {
        monthObj.push(dateObj);
     }
   });
   if(monthObj.length != 0) newDataObj.push(monthObj);
});