对周日、周一、...、周六等工作日对象进行排序 [英] Sort object of weekdays like Sunday, Monday, ..., Saturday

查看:36
本文介绍了对周日、周一、...、周六等工作日对象进行排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何按工作日对工作日的 Javascript 对象进行排序,即这里是对象的 JSON 格式:

 {"Friday":["5:00pm to 12:00am"] ,"Wednesday":["5:00pm to 11:00pm"],"Sunday":["11:00am to 11:00pm"], "Thursday":["5:00pm to 11:00pm"],"Saturday":["11:00am to 12:00am"]}

关键是一天,即星期三".我想根据工作日的顺序对其进行排序,即周日、周一、周二等

预期输出为:

{ "Wednesday":["5:00pm to 11:00pm"], "Thursday":["5:00pm to 11:00pm"], "Friday":["5:00pm to 12:00am"], "Saturday":["11:00am to 12:00am"], "Sunday":["11:00am to 11:00pm"]}

这就是我正在尝试的.

var 键 = {};Object.keys(scope.daySpecificHours).map(function (k) { return [k, scope.daySpecificHours[k]]; }).sort(函数(a,b){如果 (a[0]  b[0]) 返回 1;返回0;}).forEach(函数(d){scope.daySpecificHours[d[0]] = d;});

谢谢.

解决方案

就像我在评论中所说的,您不能对对象进行排序,但是如果您可以将数据的格式更改为具有数组,则可以轻松地对其进行排序使用 [].sort

let data = [{ 天:星期五",小时:[下午 5:00 至凌晨 12:00"] },{ 天:星期三",小时:[下午 5:00 至晚上 11:00"] },{ 天:星期日",小时:[上午 11:00 至晚上 11:00"] },{ 天:星期四",小时:[下午 5:00 至晚上 11:00"] },{ 天:星期六",小时:[上午 11:00 至上午 12:00"] }];常量排序器 = {//"星期日": 0,//<<如果星期日是一周的第一天星期一":1,星期二":2,星期三":3,星期四":4,星期五":5,星期六":6,星期日":7}data.sort(function sortByDay(a, b) {让 day1 = a.day.toLowerCase();让 day2 = b.day.toLowerCase();返回分拣员[day1] - 分拣员[day2];});控制台日志(数据);document.write("

" + JSON.stringify(data, null, 3) + "

");

编辑

要按星期几订购"对象的键,再次<强>不保证订单,使用风险自负

let data = {星期五":[下午 5:00 至凌晨 12:00"],星期三":[下午 5:00 到晚上 11:00"],"星期日": ["上午 11:00 至晚上 11:00"],"星期四": ["下午 5:00 到晚上 11:00"],星期六":[上午 11:00 至上午 12:00"]};常量排序器 = {星期一":1,星期二":2,星期三":3,星期四":4,星期五":5,星期六":6,星期日":7};让 tmp = [];Object.keys(data).forEach(function(key) {让值 = 数据 [键];让 index = sorter[key.toLowerCase()];tmp[索引] = {钥匙:钥匙,价值:价值};});让orderedData = {};tmp.forEach(函数(对象){有序数据[obj.key] = obj.value;});console.log(orderedData);document.write("

" + JSON.stringify(orderedData, null, 3) + "

");

How to sort Javascript object of week days by weekdays i.e Here, is JSON format of object:

 {"Friday":["5:00pm to 12:00am"] ,"Wednesday":["5:00pm to 11:00pm"],"Sunday":["11:00am to 11:00pm"], "Thursday":["5:00pm to 11:00pm"],"Saturday":["11:00am to 12:00am"]}

where key is day i.e."Wednesday". I want to sort it based on order of weekdays i.e Sunday, Monday, Tuesday etc

Expected Output is:

{ "Wednesday":["5:00pm to 11:00pm"], "Thursday":["5:00pm to 11:00pm"], "Friday":["5:00pm to 12:00am"], "Saturday":["11:00am to 12:00am"], "Sunday":["11:00am to 11:00pm"]}

this is what i was trying.

var keys = {}; 
Object.keys(scope.daySpecificHours)
.map(function (k) { return [k, scope.daySpecificHours[k]]; })
.sort(function (a, b) {
if (a[0] < b[0]) return -1;
if (a[0] > b[0]) return 1;
return 0;
})
.forEach(function (d) {
scope.daySpecificHours[d[0]] = d;
});

Thanks.

解决方案

Like I said in my comment, you can't sort an object but if you can change your data's format to have an array, you can easily sort it by using [].sort

let data = [
  { day: "Friday", hours: ["5:00pm to 12:00am"] },
  { day: "Wednesday", hours: ["5:00pm to 11:00pm"] },
  { day: "Sunday", hours: ["11:00am to 11:00pm"] },
  { day: "Thursday", hours: ["5:00pm to 11:00pm"] },
  { day: "Saturday", hours: ["11:00am to 12:00am"] }
];

const sorter = {
  // "sunday": 0, // << if sunday is first day of week
  "monday": 1,
  "tuesday": 2,
  "wednesday": 3,
  "thursday": 4,
  "friday": 5,
  "saturday": 6,
  "sunday": 7
}

data.sort(function sortByDay(a, b) {
  let day1 = a.day.toLowerCase();
  let day2 = b.day.toLowerCase();
  return sorter[day1] - sorter[day2];
});

console.log(data);
document.write("<pre>" + JSON.stringify(data, null, 3) + "</pre>");

edit

To "order" your object's keys by day of the week, again order is not guaranteed, use at your own risk

let data = {
  "Friday": ["5:00pm to 12:00am"],
  "Wednesday": ["5:00pm to 11:00pm"],
  "Sunday": ["11:00am to 11:00pm"],
  "Thursday": ["5:00pm to 11:00pm"],
  "Saturday": ["11:00am to 12:00am"]
};

const sorter = {
  "monday": 1,
  "tuesday": 2,
  "wednesday": 3,
  "thursday": 4,
  "friday": 5,
  "saturday": 6,
  "sunday": 7
};

let tmp = [];
Object.keys(data).forEach(function(key) {
  let value = data[key];
  let index = sorter[key.toLowerCase()];
  tmp[index] = {
    key: key,
    value: value
  };
});

let orderedData = {};
tmp.forEach(function(obj) {
  orderedData[obj.key] = obj.value;
});

console.log(orderedData);
document.write("<pre>" + JSON.stringify(orderedData, null, 3) + "</pre>");

这篇关于对周日、周一、...、周六等工作日对象进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆