最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

从阵列中获取当天的最低和最高时间

IT培训 admin 4浏览 0评论

从阵列中获取当天的最低和最高时间

我有这样的对象数组

const timings = [{
        monday: { from: "12:00", to: "13:00" },
        tuesday: { from: "11:00", to: "13:00" },
        thursday: { from: "11:00", to: "13:00" },
        friday: { from: "11:00", to: "13:00" },
        saturday: { from: "11:00", to: "13:00" },
    },

    {
        monday: { from: "10:00", to: "17:00" },
        tuesday: { from: "09:00", to: "10:00" },
        thursday: { from: "05:00", to: "13:00" },
        friday: { from: "02:00", to: "13:30" },
        saturday: { from: "11:00", to: "13:00" },
    },

    {
        monday: { from: "13:00", to: "14:20" },
        tuesday: { from: "11:00", to: "13:00" },
        thursday: { from: "11:00", to: "13:00" },
        friday: { from: "11:00", to: "13:00" },
        saturday: { from: "11:00", to: "13:00" },
    },

    {
        monday: { from: "12:00", to: "13:00" },
        tuesday: { from: "11:00", to: "13:40" },
        thursday: { from: "11:00", to: "16:00" },
        friday: { from: "11:00", to: "13:00" },
        saturday: { from: "11:00", to: "13:00" },
        sunday: {from: "00:00", to: "23:59"}
    },
]

我希望输出包含数组中当天的最低和最高时间

例如输出:

{
    monday: { from: "10:00", to: "17:00" },
    tuesday: { from: "09:00", to: "13:40" },
    thursday: { from: "05:00", to: "16:00" },
    friday: { from: "02:00", to: "13:30" },
    saturday: { from: "11:00", to: "13:00" },
    sunday: {from: "00:00", to: "23:59"}
}

我想出了一个很长的解决方案,但是它真的很长而且效率不高。

我的解决方案

mondayFrom = timings.map(d => (d.monday && d.monday.from))
mondayTo = timings.map(d => (d.monday && d.monday.to))
tuesdayFrom = timings.map(d => (d.tuesday && d.tuesday.to))
// .... rest of the days

这将生成一个数组,我可以从该数组中找到最小值和最大值,但是我觉得这是一个不好的逻辑。

[如果有更好的方法,请告诉我。谢谢

回答如下:

使用reduce使它相当简单

const timings = [{
        monday: { from: "12:00", to: "13:00" },
        tuesday: { from: "11:00", to: "13:00" },
        thursday: { from: "11:00", to: "13:00" },
        friday: { from: "11:00", to: "13:00" },
        saturday: { from: "11:00", to: "13:00" },
    },

    {
        monday: { from: "10:00", to: "17:00" },
        tuesday: { from: "09:00", to: "10:00" },
        thursday: { from: "05:00", to: "13:00" },
        friday: { from: "02:00", to: "13:30" },
        saturday: { from: "11:00", to: "13:00" },
    },

    {
        monday: { from: "13:00", to: "14:20" },
        tuesday: { from: "11:00", to: "13:00" },
        thursday: { from: "11:00", to: "13:00" },
        friday: { from: "11:00", to: "13:00" },
        saturday: { from: "11:00", to: "13:00" },
    },

    {
        monday: { from: "12:00", to: "13:00" },
        tuesday: { from: "11:00", to: "13:40" },
        thursday: { from: "11:00", to: "16:00" },
        friday: { from: "11:00", to: "13:00" },
        saturday: { from: "11:00", to: "13:00" },
        sunday: {from: "00:00", to: "23:59"}
    },
]

let result = timings.reduce((a, x) => {
    Object.entries(x).forEach(([dow, obj]) => {
        if(!a[dow]) {
            a[dow] = Object.assign({}, obj);
        } else {
            a[dow].from = a[dow].from < obj.from ? a[dow].from : obj.from;
            a[dow].to = a[dow].to > obj.to ? a[dow].to : obj.to;
        }
    });
    return a;
}, {});

console.log(result);

从阵列中获取当天的最低和最高时间

我有这样的对象数组

const timings = [{
        monday: { from: "12:00", to: "13:00" },
        tuesday: { from: "11:00", to: "13:00" },
        thursday: { from: "11:00", to: "13:00" },
        friday: { from: "11:00", to: "13:00" },
        saturday: { from: "11:00", to: "13:00" },
    },

    {
        monday: { from: "10:00", to: "17:00" },
        tuesday: { from: "09:00", to: "10:00" },
        thursday: { from: "05:00", to: "13:00" },
        friday: { from: "02:00", to: "13:30" },
        saturday: { from: "11:00", to: "13:00" },
    },

    {
        monday: { from: "13:00", to: "14:20" },
        tuesday: { from: "11:00", to: "13:00" },
        thursday: { from: "11:00", to: "13:00" },
        friday: { from: "11:00", to: "13:00" },
        saturday: { from: "11:00", to: "13:00" },
    },

    {
        monday: { from: "12:00", to: "13:00" },
        tuesday: { from: "11:00", to: "13:40" },
        thursday: { from: "11:00", to: "16:00" },
        friday: { from: "11:00", to: "13:00" },
        saturday: { from: "11:00", to: "13:00" },
        sunday: {from: "00:00", to: "23:59"}
    },
]

我希望输出包含数组中当天的最低和最高时间

例如输出:

{
    monday: { from: "10:00", to: "17:00" },
    tuesday: { from: "09:00", to: "13:40" },
    thursday: { from: "05:00", to: "16:00" },
    friday: { from: "02:00", to: "13:30" },
    saturday: { from: "11:00", to: "13:00" },
    sunday: {from: "00:00", to: "23:59"}
}

我想出了一个很长的解决方案,但是它真的很长而且效率不高。

我的解决方案

mondayFrom = timings.map(d => (d.monday && d.monday.from))
mondayTo = timings.map(d => (d.monday && d.monday.to))
tuesdayFrom = timings.map(d => (d.tuesday && d.tuesday.to))
// .... rest of the days

这将生成一个数组,我可以从该数组中找到最小值和最大值,但是我觉得这是一个不好的逻辑。

[如果有更好的方法,请告诉我。谢谢

回答如下:

使用reduce使它相当简单

const timings = [{
        monday: { from: "12:00", to: "13:00" },
        tuesday: { from: "11:00", to: "13:00" },
        thursday: { from: "11:00", to: "13:00" },
        friday: { from: "11:00", to: "13:00" },
        saturday: { from: "11:00", to: "13:00" },
    },

    {
        monday: { from: "10:00", to: "17:00" },
        tuesday: { from: "09:00", to: "10:00" },
        thursday: { from: "05:00", to: "13:00" },
        friday: { from: "02:00", to: "13:30" },
        saturday: { from: "11:00", to: "13:00" },
    },

    {
        monday: { from: "13:00", to: "14:20" },
        tuesday: { from: "11:00", to: "13:00" },
        thursday: { from: "11:00", to: "13:00" },
        friday: { from: "11:00", to: "13:00" },
        saturday: { from: "11:00", to: "13:00" },
    },

    {
        monday: { from: "12:00", to: "13:00" },
        tuesday: { from: "11:00", to: "13:40" },
        thursday: { from: "11:00", to: "16:00" },
        friday: { from: "11:00", to: "13:00" },
        saturday: { from: "11:00", to: "13:00" },
        sunday: {from: "00:00", to: "23:59"}
    },
]

let result = timings.reduce((a, x) => {
    Object.entries(x).forEach(([dow, obj]) => {
        if(!a[dow]) {
            a[dow] = Object.assign({}, obj);
        } else {
            a[dow].from = a[dow].from < obj.from ? a[dow].from : obj.from;
            a[dow].to = a[dow].to > obj.to ? a[dow].to : obj.to;
        }
    });
    return a;
}, {});

console.log(result);
发布评论

评论列表 (0)

  1. 暂无评论