After using Normalizr I have an array like this:
comments : {
byId : {
"comment1" : {
id : "comment1",
author : "user2",
date: "2017-05-09 05:30:00",
comment : "....."
},
"comment2" : {
id : "comment2",
author : "user3",
date: "2017-04-19 04:30:00",
comment : "....."
},
"comment3" : {
id : "comment3",
author : "user3",
date: "2017-05-19 05:40:00",
comment : "....."
},
"comment4" : {
id : "comment4",
author : "user1",
date: "2017-08-06 05:30:00",
comment : "....."
},
"comment5" : {
id : "comment5",
author : "user3",
date: "2017-07-01 07:30:00",
comment : "....."
},
},
allIds : ["comment1", "comment2", "comment3", "commment4", "comment5"]
},
Now I have a button to change order between id or date. Then I need to change allIds (that retains sort order) to sort by date. The allIds should look like this:
allIds : ["comment2", "comment1", "comment3", "commment5", "comment4"] // sort by date
I do not know how this order could be made. I have made several unsuccessful attempts with javascript sort.
You can simply iterate the objects using Object.keys() and then sort sort it by the property date (parsed as Date):
var comments = {
byId: {
"comment1": {
id: "comment1",
author: "user2",
date: "2017-05-09 05:30:00",
comment: ".....",
},
"comment2": {
id: "comment2",
author: "user3",
date: "2017-04-19 04:30:00",
comment: ".....",
},
"comment6": {
id: "comment6",
author: "user3",
date: "2017-07-01 07:30:00",
comment: ".....485",
},
"comment3": {
id: "comment3",
author: "user3",
date: "2017-05-19 05:40:00",
comment: ".....",
},
"comment4": {
id: "comment4",
author: "user1",
date: "2017-08-06 05:30:00",
comment: ".....",
},
"comment5": {
id: "comment5",
author: "user3",
date: "2017-07-01 07:30:00",
comment: ".....",
},
},
allIds: ["comment1", "comment2", "comment3", "commment4", "comment5"]
};
var results = Object.keys(comments.byId).sort((s, a) => {
const date1 = Date.parse(comments.byId[s].date);
const date2 = Date.parse(comments.byId[a].date);
if (date1 === date2) {
return s.localeCompare(a);
}
return date1 - date2;
});
console.log(results);
References:
Note: You forgot the commas after the date string. The commas after the comment string are not necessary.
Update Added another sort condition.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With