为了账号安全,请及时绑定邮箱和手机立即绑定

JS数据过滤器和组不正确

JS数据过滤器和组不正确

互换的青春 2021-06-10 10:04:33
我使用字典数组,我想按时间段对数据进行分组,我有一个解决方法。但是现在我发现了问题,最后几个小时的数据没有出现在分组数组中。代码:    // Dictionary array:var array = [        { item: "item", category: "category", dateTime: "19/05/23 05:46:33" },        { item: "item", category: "category", dateTime: "19/05/23 05:21:33" },        { item: "item", category: "category", dateTime: "19/05/23 06:31:33" },        { item: "item", category: "category", dateTime: "19/05/23 06:46:33" },        { item: "item", category: "category", dateTime: "19/05/23 07:34:33" },        { item: "item", category: "category", dateTime: "19/05/23 07:55:33" },        { item: "item", category: "category", dateTime: "19/05/23 08:46:33" },        { item: "item", category: "category", dateTime: "19/05/23 09:16:33" },        { item: "item", category: "category", dateTime: "19/05/23 09:46:33" },        { item: "item", category: "category", dateTime: "19/05/23 10:36:33" },        { item: "item", category: "category", dateTime: "19/05/23 11:47:33" },        { item: "item", category: "category", dateTime: "19/05/23 11:55:33" },        { item: "item", category: "category", dateTime: "19/05/23 12:37:33" },        { item: "item", category: "category", dateTime: "19/05/23 14:27:33" },        { item: "item", category: "category", dateTime: "19/05/23 14:37:33" },    ];因此,正如您在数组中看到的那样,我在过滤数据后的时间为 14:00 - 14:45 的数据未正确显示。在我的数组中,我有两条记录:{ item: "item", category: "category", dateTime: "19/05/23 14:27:33" },{ item: "item", category: "category", dateTime: "19/05/23 14:37:33" },我试图找到解决方案,但我卡住了。预期输出:{    "time": "14:00 - 14:45",    "groupedData": [{ item: "item", category: "category", dateTime: "19/05/23 14:27:33" },    { item: "item", category: "category", dateTime: "19/05/23 14:37:33" }] }
查看完整描述

3 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

您可以直接比较时间并在结果集中先找到组,然后找到项目。


var array = [{ item: "item", category: "category", dateTime: "19/05/23 05:46:33" }, { item: "item", category: "category", dateTime: "19/05/23 05:21:33" }, { item: "item", category: "category", dateTime: "19/05/23 06:31:33" }, { item: "item", category: "category", dateTime: "19/05/23 06:46:33" }, { item: "item", category: "category", dateTime: "19/05/23 07:34:33" }, { item: "item", category: "category", dateTime: "19/05/23 07:55:33" }, { item: "item", category: "category", dateTime: "19/05/23 08:46:33" }, { item: "item", category: "category", dateTime: "19/05/23 09:16:33" }, { item: "item", category: "category", dateTime: "19/05/23 09:46:33" }, { item: "item", category: "category", dateTime: "19/05/23 10:36:33" }, { item: "item", category: "category", dateTime: "19/05/23 11:47:33" }, { item: "item", category: "category", dateTime: "19/05/23 11:55:33" }, { item: "item", category: "category", dateTime: "19/05/23 12:37:33" }, { item: "item", category: "category", dateTime: "19/05/23 14:27:33" }, { item: "item", category: "category", dateTime: "19/05/23 14:37:33" }],

    time = ["05:45 - 06:00", "06:00 - 07:00", "07:00 - 08:00", "08:00 - 09:00", "09:00 - 10:00", "10:00 - 11:00", "11:00 - 12:00", "12:00 - 13:00", "13:00 - 14:00", "14:00 - 14:45"],

    result = array.reduce((r, o) => {

        var part = o.dateTime.slice(9, 14),

            group = time.find(t => {

                var [min, max] = t.split(' - ');

                return min <= part && part < max;

            }),

            temp = r.find(({ time }) => time === group);


        if (!group) return r;

        if (!temp) {

            r.push({ time: group, groupedData: [o] });

            return r;

        }

        temp.groupedData.push(o);

        return r;

    }, []);


console.log(result);

.as-console-wrapper { max-height: 100% !important; top: 0; }


查看完整回答
反对 回复 2021-06-11
?
湖上湖

TA贡献2003条经验 获得超2个赞

在您的代码中,您只比较小时数而忽略分钟数。这会导致您在14:00 - 14:45期间遇到问题。


由于日期的格式以及执行比较的方式,您可以在此处进行基于字符串的比较:


const array = [

        { item: "item", category: "category", dateTime: "19/05/23 05:46:33" },

        { item: "item", category: "category", dateTime: "19/05/23 05:21:33" },

        { item: "item", category: "category", dateTime: "19/05/23 06:31:33" },

        { item: "item", category: "category", dateTime: "19/05/23 06:46:33" },

        { item: "item", category: "category", dateTime: "19/05/23 07:34:33" },

        { item: "item", category: "category", dateTime: "19/05/23 07:55:33" },

        { item: "item", category: "category", dateTime: "19/05/23 08:46:33" },

        { item: "item", category: "category", dateTime: "19/05/23 09:16:33" },

        { item: "item", category: "category", dateTime: "19/05/23 09:46:33" },

        { item: "item", category: "category", dateTime: "19/05/23 10:36:33" },

        { item: "item", category: "category", dateTime: "19/05/23 11:47:33" },

        { item: "item", category: "category", dateTime: "19/05/23 11:55:33" },

        { item: "item", category: "category", dateTime: "19/05/23 12:37:33" },

        { item: "item", category: "category", dateTime: "19/05/23 14:27:33" },

        { item: "item", category: "category", dateTime: "19/05/23 14:37:33" },

    ];


const times = ["05:45 - 06:00", "06:00 - 07:00",

     "07:00 - 08:00", "08:00 - 09:00", "09:00 - 10:00",

     "10:00 - 11:00", "11:00 - 12:00", "12:00 - 13:00",

     "13:00 - 14:00", "14:00 - 14:45"];


const grouped = times.map(time => {

  const [min, max] = time.split(' - ');

  const groupedData = array.filter(({dateTime}) => {

    const ts = dateTime.substring(9, 14);

    

    return ts >= min && ts < max;

  });

  

  return {time, groupedData};

});


console.log(grouped);


查看完整回答
反对 回复 2021-06-11
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

   const array = [

        { item: "item", category: "category", dateTime: "19/05/23 05:46:33" },

        { item: "item", category: "category", dateTime: "19/05/23 05:21:33" },

        { item: "item", category: "category", dateTime: "19/05/23 06:31:33" },

        { item: "item", category: "category", dateTime: "19/05/23 06:46:33" },

        { item: "item", category: "category", dateTime: "19/05/23 07:34:33" },

        { item: "item", category: "category", dateTime: "19/05/23 07:55:33" },

        { item: "item", category: "category", dateTime: "19/05/23 08:46:33" },

        { item: "item", category: "category", dateTime: "19/05/23 09:16:33" },

        { item: "item", category: "category", dateTime: "19/05/23 09:46:33" },

        { item: "item", category: "category", dateTime: "19/05/23 10:36:33" },

        { item: "item", category: "category", dateTime: "19/05/23 11:47:33" },

        { item: "item", category: "category", dateTime: "19/05/23 11:55:33" },

        { item: "item", category: "category", dateTime: "19/05/23 12:37:33" },

        { item: "item", category: "category", dateTime: "19/05/23 14:27:33" },

        { item: "item", category: "category", dateTime: "19/05/23 14:37:33" },

    ];

    // And I have time periods, for ex:

    const times = ["05:45 - 06:00", "06:00 - 07:00",

        "07:00 - 08:00", "08:00 - 09:00", "09:00 - 10:00",

        "10:00 - 11:00", "11:00 - 12:00", "12:00 - 13:00",

        "13:00 - 14:00", "14:00 - 14:45"

    ];


    const result = [];


    times.forEach((time) => {


        const [min, max] = time.split(" - ");


        const groupedData = array.filter(({ dateTime }) => {

            return `${min}:00`.localeCompare(dateTime.slice(-8)) <= 0 && `${max}:00`.localeCompare(dateTime.slice(-8)) >= 0;

        })


        result.push({

            time,

            groupedData

        });

    });



    console.log('@>result', result)


查看完整回答
反对 回复 2021-06-11
  • 3 回答
  • 0 关注
  • 136 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信