How to create array of object in angularjs or javascript - javascript
I have below array and I want to create another array of array. below is my array
$scope.data2 =
[
{"dt":"07 Jul 2015","avgdelay":"10","code_sent_time":"07 Jul 2015 12:30 PM","reply_received_time":"07 Jul 2015 12:40 PM","time_diff":10},
{"dt":"07 Jul 2015","avgdelay":"10","code_sent_time":"07 Jul 2015 02:10 AM","reply_received_time":"07 Jul 2015 02:30 AM","time_diff":20 },
{"dt":"07 Jul 2015","avgdelay":"10","code_sent_time":"07 Jul 2015 03:10 AM","reply_received_time":"07 Jul 2015 03:15 AM","time_diff":5 },
{"dt":"07 Jul 2015","avgdelay":"10","code_sent_time":"07 Jul 2015 04:45 AM","reply_received_time":"07 Jul 2015 05:00 AM","time_diff":15 },
{"dt":"08 Jul 2015","avgdelay":"20","code_sent_time":"08 Jul 2015 12:30 PM","reply_received_time":"08 Jul 2015 12:40 PM","time_diff":35},
{"dt":"08 Jul 2015","avgdelay":"20","code_sent_time":"08 Jul 2015 02:10 AM","reply_received_time":"08 Jul 2015 02:30 AM","time_diff":42 },
{"dt":"08 Jul 2015","avgdelay":"20","code_sent_time":"08 Jul 2015 03:10 AM","reply_received_time":"08 Jul 2015 03:15 AM","time_diff":5 },
{"dt":"08 Jul 2015","avgdelay":"20","code_sent_time":"08 Jul 2015 04:45 AM","reply_received_time":"08 Jul 2015 05:00 AM","time_diff":5 },
{"dt":"09 Jul 2015","avgdelay":"30","code_sent_time":"09 Jul 2015 12:30 PM","reply_received_time":"09 Jul 2015 12:40 PM","time_diff":1},
{"dt":"09 Jul 2015","avgdelay":"30","code_sent_time":"09 Jul 2015 02:10 AM","reply_received_time":"09 Jul 2015 02:30 AM","time_diff":28},
{"dt":"09 Jul 2015","avgdelay":"30","code_sent_time":"09 Jul 2015 03:10 AM","reply_received_time":"09 Jul 2015 03:15 AM","time_diff":12},
{"dt":"09 Jul 2015","avgdelay":"30","code_sent_time":"09 Jul 2015 04:45 AM","reply_received_time":"09 Jul 2015 05:00 AM","time_diff":17},
{"dt":"10 Jul 2015","avgdelay":"10","code_sent_time":"10 Jul 2015 12:30 PM","reply_received_time":"10 Jul 2015 12:40 PM","time_diff":19},
{"dt":"10 Jul 2015","avgdelay":"10","code_sent_time":"10 Jul 2015 02:10 AM","reply_received_time":"10 Jul 2015 02:30 AM","time_diff":21},
{"dt":"10 Jul 2015","avgdelay":"10","code_sent_time":"10 Jul 2015 03:10 AM","reply_received_time":"10 Jul 2015 03:15 AM","time_diff":15},
{"dt":"10 Jul 2015","avgdelay":"10","code_sent_time":"10 Jul 2015 04:45 AM","reply_received_time":"10 Jul 2015 05:00 AM","time_diff":15},
{"dt":"11 Jul 2015","avgdelay":"10", "code_sent_time":"11 Jul 2015 12:30 PM","reply_received_time":"11 Jul 2015 12:40 PM","time_diff":39},
{"dt":"11 Jul 2015","avgdelay":"10", "code_sent_time":"11 Jul 2015 02:10 AM","reply_received_time":"11 Jul 2015 02:30 AM","time_diff":7},
{"dt":"11 Jul 2015","avgdelay":"10", "code_sent_time":"11 Jul 2015 03:10 AM","reply_received_time":"11 Jul 2015 03:15 AM","time_diff":9},
{"dt":"11 Jul 2015","avgdelay":"10", "code_sent_time":"11 Jul 2015 04:45 AM","reply_received_time":"11 Jul 2015 05:00 AM","time_diff":22},
{"dt":"12 Jul 2015","avgdelay":"10","code_sent_time":"12 Jul 2015 12:30 PM","reply_received_time":"12 Jul 2015 12:40 PM","time_diff":32},
{"dt":"12 Jul 2015","avgdelay":"10","code_sent_time":"12 Jul 2015 02:10 AM","reply_received_time":"12 Jul 2015 02:30 AM","time_diff":11},
{"dt":"12 Jul 2015","avgdelay":"10","code_sent_time":"12 Jul 2015 03:10 AM","reply_received_time":"12 Jul 2015 03:15 AM","time_diff":52},
{"dt":"12 Jul 2015","avgdelay":"10","code_sent_time":"12 Jul 2015 04:45 AM","reply_received_time":"12 Jul 2015 05:00 AM","time_diff":37}
];
My resultant array would be like,
$scope.resarray = [
{"dt":"07 Jul 2015","avgdelay":"10","data" :
[
{"code_sent_time":"07 Jul 2015 12:30 PM","reply_received_time":"07 Jul 2015 12:40 PM","time_diff":10},
{"code_sent_time":"07 Jul 2015 02:10 AM","reply_received_time":"07 Jul 2015 02:30 AM","time_diff":20 },
{"code_sent_time":"07 Jul 2015 03:10 AM","reply_received_time":"07 Jul 2015 03:15 AM","time_diff":5 },
{"code_sent_time":"07 Jul 2015 04:45 AM","reply_received_time":"07 Jul 2015 05:00 AM","time_diff":15 }
]
},
{"dt":"08 Jul 2015","avgdelay":"20","data":
[
{"code_sent_time":"08 Jul 2015 12:30 PM","reply_received_time":"08 Jul 2015 12:40 PM","time_diff":35},
{"code_sent_time":"08 Jul 2015 02:10 AM","reply_received_time":"08 Jul 2015 02:30 AM","time_diff":42 },
{"code_sent_time":"08 Jul 2015 03:10 AM","reply_received_time":"08 Jul 2015 03:15 AM","time_diff":5 },
{"code_sent_time":"08 Jul 2015 04:45 AM","reply_received_time":"08 Jul 2015 05:00 AM","time_diff":5 }
]
},
{"dt":"09 Jul 2015","avgdelay":"30","data":
[
{"code_sent_time":"09 Jul 2015 12:30 PM","reply_received_time":"09 Jul 2015 12:40 PM","time_diff":1},
{"code_sent_time":"09 Jul 2015 02:10 AM","reply_received_time":"09 Jul 2015 02:30 AM","time_diff":28},
{"code_sent_time":"09 Jul 2015 03:10 AM","reply_received_time":"09 Jul 2015 03:15 AM","time_diff":12},
{"code_sent_time":"09 Jul 2015 04:45 AM","reply_received_time":"09 Jul 2015 05:00 AM","time_diff":17},
]
}
];
Every date have 4 rows and I want to generate the array where every date have another array having all 4 details for that date.
I tried with various options but not successded. Kindly help me to solve this.
Below Is what I have tried,
$scope.genarr = function()
{
var data2length = $scope.data2.length;
var firstdate = $scope.data2[0].dt;
var sourcecheckdate = firstdate.split(' ');
$scope.resarray = {};
var dtcheckflag = false;
var insertrow = null;
var j = 0;
var k = 0;
var z = 1;
var data=[];
for (var i=0;i< data2length;i++)
{
var targetcheckdate = $scope.data2[i].code_sent_time.split(' ');
if (targetcheckdate[0] === sourcecheckdate[0] && targetcheckdate[1] === sourcecheckdate[1] && targetcheckdate[2] === sourcecheckdate[2])
{
firstdate = $scope.data2[i].dt;
sourcecheckdate = firstdate.split(' ');
}
else
{
firstdate = $scope.data2[i].dt;
sourcecheckdate = firstdate.split(' ');
}
if (insertrow != firstdate)
{
k = 0;
$scope.resarray[j] = {"dt":$scope.data2[i].dt,"avgdelay":$scope.data2[i].avgdelay,"data":[]};
//$scope.resarray[j].data[k] = null;
$scope.resarray[j].data[k]= {"code_sent_time":$scope.data2[i].code_sent_time , "reply_received_time" :$scope.data2[i].reply_received_time , "time_diff" : $scope.data2[i].time_diff};
insertrow = firstdate;
j+=1;
}
else
{
$scope.resarray[j].data[k]= {"code_sent_time":$scope.data2[i].code_sent_time , "reply_received_time" :$scope.data2[i].reply_received_time , "time_diff" : $scope.data2[i].time_diff};
}
k +=1;
}
};
Please check this : http://plnkr.co/edit/BOYqNcdpi8uGKRraDAw1?p=preview
Controller:
$scope.data = []; //New formated array of data
for(var k = 0; k < $scope.data2.length; k++) {
var arrayData = {}; //Temporary object
arrayData.dt = $scope.data2[k].dt;
arrayData.avgdelay = $scope.data2[k].avgdelay;
arrayData.data = [];
for(var j = 0; j<4; j++,k++) {
if (arrayData.dt == $scope.data2[k].dt) {
var tempObj = {'code_sent_time': $scope.data2[k].code_sent_time,
'reply_received_time':$scope.data2[k].reply_received_time,
'time_diff':$scope.data2[k].time_diff
};
arrayData.data.push(tempObj);
}
}
$scope.data.push(arrayData);
}
the data field is currently an object, but it needs to be an array.
{"dt":"07 Jul 2015","avgdelay":"10","data" :
{
{"code_sent_time":"07 Jul 2015 12:30 PM"},
{"code_sent_time":"07 Jul 2015 02:10 AM"},
{"code_sent_time":"07 Jul 2015 03:10 AM"},
{"code_sent_time":"07 Jul 2015 04:45 AM"}
}
},
should be
{"dt":"07 Jul 2015","avgdelay":"10","data" :
[
{"code_sent_time":"07 Jul 2015 12:30 PM"},
{"code_sent_time":"07 Jul 2015 02:10 AM"},
{"code_sent_time":"07 Jul 2015 03:10 AM"},
{"code_sent_time":"07 Jul 2015 04:45 AM"}
]
},
{} creates and object, [] creates and array
var newData = [];
var dateDict = {};
angular.forEach(data2,function(d){
var temp = {};
if(dateDict[d.dt]){
dateDict[d.dt].push(d);
}
else{
dateDict[d.dt] = [];
dateDict[d.dt].push(d);
}
});
angular.forEach(dateDict,function(val,key){
var obj = {
"dt":key,
"avgdelay":val[0].avgdelay,
"data": val
};
newData.push(obj);
});
I think this will solve your problem. data2 is old data, newData is the one that you want.
Related
Subtracting months from current date is returning unexpected results. Same Month (March) is being returned twice
I have created a method that returns the past months according to the current date and how many months from the past you need, seems like the javascript date object is behaving wrongly. I guess the problem has only popped up today as it's the 29th of the current month and subtracting 1 month from 29 March which is supposed to be 29 February (doesn't exist) lead javascript to fallback to +1 day... Can someone please suggest a great fix for this. Thanks 🙌 export type Config = { n: number; i18n: i18n; }; export default function NMonthsAgo(config: Config): MonthsAgo[] { const date = new Date(); const { i18n } = config; let { n } = config; n = Math.max(n, 0); // add one month in future to include the current one. date.setMonth(date.getMonth() + 1); return Array.from({ length: n || 1 }) .map(() => { date.setMonth(date.getMonth() - 1); console.log(date.toDateString()); ===> console print. return { monthName: formatDate(i18n, date, { month: 'long' }), monthNameShort: formatDate(i18n, date, { month: 'short' }), year: formatDate(i18n, date, { year: 'numeric' }), }; }) .reverse(); } Output: NMonthsAgo.js:36 Wed Dec 29 2021 NMonthsAgo.js:36 Mon Nov 29 2021 NMonthsAgo.js:36 Fri Oct 29 2021 NMonthsAgo.js:36 Wed Sep 29 2021 NMonthsAgo.js:36 Sun Aug 29 2021 NMonthsAgo.js:36 Thu Jul 29 2021 NMonthsAgo.js:36 Tue Jun 29 2021 NMonthsAgo.js:36 Sat May 29 2021 NMonthsAgo.js:36 Thu Apr 29 2021 NMonthsAgo.js:36 Mon Mar 29 2021 <=== Mars is returned twice... NMonthsAgo.js:36 Mon Mar 01 2021 <=== Mars is returned twice... NMonthsAgo.js:36 Mon Feb 01 2021 NMonthsAgo.js:36 Fri Jan 01 2021 NMonthsAgo.js:36 Wed Dec 29 2021
javascript string date from array and group by day and return new array per day
I got a array of data the data is dates they are sorted per day. Wat i want to get is the data grouped by date(day) and all the data of every day needs to be in new and separated array. my data can be short 1 date string in 1 day or very long month's or year My data: accountDateArray = [ Mon Jun 08 2020 19:47:16 GMT+0200 (Midden-Europese zomertijd), Mon Jun 08 2020 19:47:26 GMT+0200 (Midden-Europese zomertijd), Mon Jun 08 2020 19:47:34 GMT+0200 (Midden-Europese zomertijd), Tue Jun 09 2020 15:40:31 GMT+0200 (Midden-Europese zomertijd), Tue Jun 09 2020 15:42:28 GMT+0200 (Midden-Europese zomertijd), Wed Jun 10 2020 00:06:50 GMT+0200 (Midden-Europese zomertijd), Wed Jun 10 2020 00:06:50 GMT+0200 (Midden-Europese zomertijd), Wed Jun 10 2020 08:10:51 GMT+0200 (Midden-Europese zomertijd), Fri Jun 12 2020 10:59:21 GMT+0200 (Midden-Europese zomertijd), ... ] What i want is: [ [ Mon Jun 08 2020 19:47:16 GMT+0200 (Midden-Europese zomertijd), Mon Jun 08 2020 19:47:26 GMT+0200 (Midden-Europese zomertijd), Mon Jun 08 2020 19:47:34 GMT+0200 (Midden-Europese zomertijd), ], [ Tue Jun 09 2020 15:40:31 GMT+0200 (Midden-Europese zomertijd), Tue Jun 09 2020 15:42:28 GMT+0200 (Midden-Europese zomertijd), ], ... ] My code let NewDateArray = []; for (let i in accountDateArray) { NewDateArray.push(accountDateArray[i].toString().substring(0, 10)); } let unique = [...new Set(NewDateArray)]; for (let i in accountDateArray) { for (let n in unique) { if ( unique[n] === accountDateArray[i].toString().substring(0, 10) ) { console.log(accountDateArray[i]); } } }
You can make use of reduce function, I hope this will lead you to the right direction. var accountDateArray = ['Mon Jun 08 2020 19:47:16 GMT+0200 (Midden-Europese zomertijd)','Mon Jun 08 2020 19:47:26 GMT+0200 (Midden-Europese zomertijd)','Mon Jun 08 2020 19:47:34 GMT+0200 (Midden-Europese zomertijd)','Tue Jun 09 2020 15:40:31 GMT+0200 (Midden-Europese zomertijd)','Tue Jun 09 2020 15:42:28 GMT+0200 (Midden-Europese zomertijd)','Wed Jun 10 2020 00:06:50 GMT+0200 (Midden-Europese zomertijd)','Wed Jun 10 2020 00:06:50 GMT+0200 (Midden-Europese zomertijd)','Wed Jun 10 2020 08:10:51 GMT+0200 (Midden-Europese zomertijd)','Fri Jun 12 2020 10:59:21 GMT+0200 (Midden-Europese zomertijd)',]; var result = Object.values(accountDateArray.reduce((acc, date)=>{ const key = new Date(date).getDate(); acc[key] = [...(acc[key] || []), date]; return acc; },{})); console.log(result);
Finding all object indices satisfying testing function, like array.findIndex() but more than first index
I have an array of objects: var data = [{"district":"201","date":"Wed Apr 01 2020","paper":671.24,"mgp":36.5}, {"district":"202","date":"Wed Apr 01 2020","paper":421.89,"mgp":44.2}, {"district":"203","date":"Wed Apr 01 2020","paper":607.85,"mgp":67.36}, {"district":"201","date":"Sun Mar 01 2020","paper":571.24,"mgp":38.8}, {"district":"202","date":"Sun Mar 01 2020","paper":421.89,"mgp":36.6}, {"district":"203","date":"Sun Mar 01 2020","paper":607.85,"mgp":69.36}, {"district":"201","date":"Sat Feb 01 2020","paper":571.24,"mgp":38.8}, {"district":"202","date":"Sat Feb 01 2020","paper":421.89,"mgp":22.2}, {"district":"203","date":"Sat Feb 01 2020","paper":607.85,"mgp":59.66}, {"district":"201","date":"Wed Jan 01 2020","paper":571.24,"mgp":38.8}, {"district":"202","date":"Wed Jan 01 2020","paper":421.89,"mgp":22.2}, {"district":"203","date":"Wed Jan 01 2020","paper":607.85,"mgp":89.26}] For each district I would like to take the values of paper and mgp for February, March, and April and divide each month's values by their January values to measure % change. Using Array.findIndex() and reduce() (like here) I can match the districts and return the correct value, but that only returns the first index of the match, and there are repeat indices because there are subsequent months. I've tried wrapping a loop of months around the findIndex() to no avail: console.log(result) returns nothing var result = data.reduce((a, b) => { var months = [...new Set(a.map(m => a.date))]; for (var month of months){ var idx = a.findIndex(e => e.district == b.district && e.date == month) if (~idx && b.date === "Wed Jan 01 2020") { a[idx].paper = a[idx].paper/b.paper; a[idx].mgp = a[idx].mgp/b.mgp} else { a.push(JSON.parse(JSON.stringify(b))); } return a }, []); Result should look like this: [{"district":"201","date":"Wed Apr 01 2020","paper":1.17,"mgp":0.94}, {"district":"202","date":"Wed Apr 01 2020","paper":1,"mgp":1.99}, {"district":"203","date":"Wed Apr 01 2020","paper":1,"mgp":0.75}, {"district":"201","date":"Sun Mar 01 2020","paper":1,"mgp":1}, {"district":"202","date":"Sun Mar 01 2020","paper":1,"mgp":1.64}, {"district":"203","date":"Sun Mar 01 2020","paper":1,"mgp":0.77}, {"district":"201","date":"Sat Feb 01 2020","paper":1.17,"mgp":1}, {"district":"202","date":"Sat Feb 01 2020","paper":1,"mgp":1}, {"district":"203","date":"Sat Feb 01 2020","paper":1,"mgp":0.67]
var data = [{"district":"201","date":"Wed Apr 01 2020","paper":671.24,"mgp":36.5}, {"district":"202","date":"Wed Apr 01 2020","paper":421.89,"mgp":44.2}, {"district":"203","date":"Wed Apr 01 2020","paper":607.85,"mgp":67.36}, {"district":"201","date":"Sun Mar 01 2020","paper":571.24,"mgp":38.8}, {"district":"202","date":"Sun Mar 01 2020","paper":421.89,"mgp":36.6}, {"district":"203","date":"Sun Mar 01 2020","paper":607.85,"mgp":69.36}, {"district":"201","date":"Sat Feb 01 2020","paper":571.24,"mgp":38.8}, {"district":"202","date":"Sat Feb 01 2020","paper":421.89,"mgp":22.2}, {"district":"203","date":"Sat Feb 01 2020","paper":607.85,"mgp":59.66}, {"district":"201","date":"Wed Jan 01 2020","paper":571.24,"mgp":38.8}, {"district":"202","date":"Wed Jan 01 2020","paper":421.89,"mgp":22.2}, {"district":"203","date":"Wed Jan 01 2020","paper":607.85,"mgp":89.26}] let res = data.filter(it => !it.date.includes('Jan')) .reduce ((acc, rec) => [...acc, {district: rec.district, date: rec.date, paper: +(rec.paper/data.filter(it => (it.district === rec.district && it.date.includes('Jan')))[0].paper).toFixed(2), mgp: +(rec.mgp/data.filter(it => (it.district === rec.district && it.date.includes('Jan')))[0].mgp).toFixed(2)}] ,[]) console.log(JSON.stringify(res))
var data = [{"district":"201","date":"Wed Apr 01 2020","paper":671.24,"mgp":36.5}, {"district":"202","date":"Wed Apr 01 2020","paper":421.89,"mgp":44.2}, {"district":"203","date":"Wed Apr 01 2020","paper":607.85,"mgp":67.36}, {"district":"201","date":"Sun Mar 01 2020","paper":571.24,"mgp":38.8}, {"district":"202","date":"Sun Mar 01 2020","paper":421.89,"mgp":36.6}, {"district":"203","date":"Sun Mar 01 2020","paper":607.85,"mgp":69.36}, {"district":"201","date":"Sat Feb 01 2020","paper":571.24,"mgp":38.8}, {"district":"202","date":"Sat Feb 01 2020","paper":421.89,"mgp":22.2}, {"district":"203","date":"Sat Feb 01 2020","paper":607.85,"mgp":59.66}, {"district":"201","date":"Wed Jan 01 2020","paper":571.24,"mgp":38.8}, {"district":"202","date":"Wed Jan 01 2020","paper":421.89,"mgp":22.2}, {"district":"203","date":"Wed Jan 01 2020","paper":607.85,"mgp":89.26}]; const byDistrict = {}; for (const item of data) { const month = item.date.split(' ')[1]; // eg Apr if (!byDistrict[item.district]) byDistrict[item.district] = { }; byDistrict[item.district][month] = { paper: item.paper, mgp: item.mgp, date: item.date }; } for (const district of Object.keys(byDistrict)) { const District = byDistrict[district]; District.all = { district, paper: (District.Feb.paper + District.Mar.paper + District.Apr.paper) / District.Jan.paper, mgp: (District.Feb.mgp + District.Mar.mgp + District.Apr.mgp) / District.Jan.mgp } } const result = Object.keys(byDistrict).map(it => byDistrict[it].all); console.log(result);
You could collect the january values first and then omit january in the result set. var data = [{ district: "201", date: "Wed Apr 01 2020", paper: 671.24, mgp: 36.5 }, { district: "202", date: "Wed Apr 01 2020", paper: 421.89, mgp: 44.2 }, { district: "203", date: "Wed Apr 01 2020", paper: 607.85, mgp: 67.36 }, { district: "201", date: "Sun Mar 01 2020", paper: 571.24, mgp: 38.8 }, { district: "202", date: "Sun Mar 01 2020", paper: 421.89, mgp: 36.6 }, { district: "203", date: "Sun Mar 01 2020", paper: 607.85, mgp: 69.36 }, { district: "201", date: "Sat Feb 01 2020", paper: 571.24, mgp: 38.8 }, { district: "202", date: "Sat Feb 01 2020", paper: 421.89, mgp: 22.2 }, { district: "203", date: "Sat Feb 01 2020", paper: 607.85, mgp: 59.66 }, { district: "201", date: "Wed Jan 01 2020", paper: 571.24, mgp: 38.8 }, { district: "202", date: "Wed Jan 01 2020", paper: 421.89, mgp: 22.2 }, { district: "203", date: "Wed Jan 01 2020", paper: 607.85, mgp: 89.26 }], january = data.reduce((r, o) => { if (o.date.includes('Jan')) r[o.district] = o; return r; }, {}), result = data.reduce((r, o) => { if (o.date.includes('Jan')) return r; r.push({ ...o, paper: +(o.paper / january[o.district].paper).toFixed(2), mgp: +(o.mgp / january[o.district].mgp).toFixed(2) }) return r; }, []); console.log(result); .as-console-wrapper { max-height: 100% !important; top: 0; }
How to group json object dates by month?
I have a JSON object like so: { "Sat Jul 28 2018 03:36:36 GMT-0700 (Pacific Daylight Time)":[ { ... }, { ... } ], "Fri Aug 03 2018 19:07:14 GMT-0700 (Pacific Daylight Time)":[ { ... } ], "Sat Aug 18 2018 17:25:50 GMT-0700 (Pacific Daylight Time)":[ { ... } ] } How can I return this into a grouped object by month?
Try this (with lodash): var input = { "Sat Jul 28 2018 03:36:36 GMT-0700 (Pacific Daylight Time)": [ "test", "tester" ], "Fri Aug 03 2018 19:07:14 GMT-0700 (Pacific Daylight Time)": [ "tester1" ], "Sat Aug 18 2018 17:25:50 GMT-0700 (Pacific Daylight Time)": [ "tester2" ] } var groupedKeys = _.groupBy(Object.keys(input), function(key) { return key.substring(4, 7) }); var groupedEntries = _.map(groupedKeys, (values, key) => { values = _.map(values, (value) => { return input[value] }); return { key: key, values: _.flattenDeep(values) }; }); var result = _.reduce(groupedEntries, (result, obj) => { result[obj.key] = obj.values; return result; }, {}) console.log(result); Output: { "Jul": [ "test", "tester" ], "Aug": [ "tester1", "tester2" ] }
Loop through the object then extract month and create new object: let jsonObj = { "Sat Jul 28 2018 03:36:36 GMT-0700 (Pacific Daylight Time)":[{},{}], "Fri Aug 03 2018 19:07:14 GMT-0700 (Pacific Daylight Time)":[{}], "Sat Aug 18 2018 17:25:50 GMT-0700 (Pacific Daylight Time)":[{}] }; let grouped = Object.keys(jsonObj).reduce((prev,key,i,all)=>{ let monthArr = {}; if(typeof prev === 'string'){ monthArr[prev.substr(4,3)] = jsonObj[prev]; prev = {}; } monthArr[key.substr(4,3)] = jsonObj[key]; return {...prev,...monthArr}; });
Convert an array of IsoDate to a Date Format [duplicate]
This question already has answers here: How do I format a date in JavaScript? (68 answers) Closed 4 years ago. I have an array of date ["Mon Jul 16 2018 11:40:28 GMT+0200 (CEST)", "Fri Jul 13 2018 09:33:46 GMT+0200 (CEST)", "Fri Jul 13 2018 09:21:36 GMT+0200 (CEST)", "Fri Jul 13 2018 09:03:42 GMT+0200 (CEST)", "Fri Jul 13 2018 09:01:05 GMT+0200 (CEST)", "Fri Jul 13 2018 08:53:23 GMT+0200 (CEST)", "Fri Jul 13 2018 08:52:33 GMT+0200 (CEST)", "Thu Jul 12 2018 13:41:59 GMT+0200 (CEST)", "Thu Jul 12 2018 13:41:49 GMT+0200 (CEST)", "Thu Jul 12 2018 13:41:42 GMT+0200 (CEST)"] I want to get it in a different format as exemple Monday 16 July 2018 instead of "Mon Jul 16 2018 11:40:28 GMT+0200 (CEST)" Is there a way to go through the table and transform the date ? const test1 = test.map(a => a.toISOString().slice(0, 10)) console.log(test1) Tried this got an error var test = ["Mon Jul 16 2018 11:40:28 GMT+0200 (CEST)", "Fri Jul 13 2018 09:33:46 GMT+0200 (CEST)", "Fri Jul 13 2018 09:21:36 GMT+0200 (CEST)", "Fri Jul 13 2018 09:03:42 GMT+0200 (CEST)", "Fri Jul 13 2018 09:01:05 GMT+0200 (CEST)", "Fri Jul 13 2018 08:53:23 GMT+0200 (CEST)", "Fri Jul 13 2018 08:52:33 GMT+0200 (CEST)", "Thu Jul 12 2018 13:41:59 GMT+0200 (CEST)", "Thu Jul 12 2018 13:41:49 GMT+0200 (CEST)", "Thu Jul 12 2018 13:41:42 GMT+0200 (CEST)" ] // Monday 16 July 2018 instead of "Mon Jul 16 2018 11:40:28 GMT+0200 (CEST)" const test1 = test.map(a => a.toISOString().slice(0, 10)); console.log(test1)
toISOString does not give me the format you wanted. You wanted Monday 16 July 2018 instead of "Mon Jul 16 2018 11:40:28 GMT+0200 (CEST)" toLocaleString gives us a long month: new Date(a).toLocaleString("en-us",{ weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }) then you can move the texts around like this: var test = ["Mon Jul 16 2018 11:40:28 GMT+0200 (CEST)", "Fri Jul 13 2018 09:33:46 GMT+0200 (CEST)", "Fri Jul 13 2018 09:21:36 GMT+0200 (CEST)", "Fri Jul 13 2018 09:03:42 GMT+0200 (CEST)", "Fri Jul 13 2018 09:01:05 GMT+0200 (CEST)", "Fri Jul 13 2018 08:53:23 GMT+0200 (CEST)", "Fri Jul 13 2018 08:52:33 GMT+0200 (CEST)", "Thu Jul 12 2018 13:41:59 GMT+0200 (CEST)", "Thu Jul 12 2018 13:41:49 GMT+0200 (CEST)", "Thu Jul 12 2018 13:41:42 GMT+0200 (CEST)" ] const locale = "en-us"; var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' } let test1 = test.map(function(a) { let dateStr = new Date(a).toLocaleString(locale,options); return dateStr.replace(/(\w+), (\w+) (\d+), (\d+)/,"$1 $3 $2 $4"); }) console.log(test1) // simpler if no replace of month: // String test1 = test.map(a => a.split(/ \d\d:/)[0]); console.log(test1) // date test1 = test.map(a => new Date(a).toDateString()); console.log(test1)
Try this. var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"] var test = ["Mon Jul 16 2018 11:40:28 GMT+0200 (CEST)", "Fri Jul 13 2018 09:33:46 GMT+0200 (CEST)", "Fri Jul 13 2018 09:21:36 GMT+0200 (CEST)", "Fri Jul 13 2018 09:03:42 GMT+0200 (CEST)", "Fri Jul 13 2018 09:01:05 GMT+0200 (CEST)", "Fri Jul 13 2018 08:53:23 GMT+0200 (CEST)", "Fri Jul 13 2018 08:52:33 GMT+0200 (CEST)", "Thu Jul 12 2018 13:41:59 GMT+0200 (CEST)", "Thu Jul 12 2018 13:41:49 GMT+0200 (CEST)", "Thu Jul 12 2018 13:41:42 GMT+0200 (CEST)" ] // Monday 16 July 2018 instead of "Mon Jul 16 2018 11:40:28 GMT+0200 (CEST)" const test1 = test.map(a => { a= new Date(a); var c= days[a.getDay()]+" "+a.getDate()+" "+months[a.getMonth()]+" "+a.getFullYear(); return c; }); console.log(test1)