You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用jQuery对Ajax获取的动态数组排序并填充下拉选框?

问题分析与解决

首先看你碰到的Uncaught TypeError: array1.sort is not a function报错,原因一目了然:你的array1和array2根本不是数组!

你初始化的时候确实声明了空数组,但在Ajax的success回调里,你用array1 = response.response.data[i].start_time直接把单个时间数值赋值给了array1,把之前的空数组完全覆盖掉了!最后array1变成了一个纯数字,自然没有sort方法,调用它肯定会报错。你console.log出来的28800、14400其实是循环最后一次的单个值,不是数组哦。

接下来给你完整的修正方案:

步骤1:正确收集数组数据

把赋值改成数组的push方法,把每个item的start_time和end_time分别添加到对应的数组里:

var array1 = []; // 用[]初始化数组比Array()更简洁直观
var array2 = [];

$.ajax({
    url:"/api/v1/workingspots",
    type: "GET",
    dataType: 'json',
    async: false, // 注意:async:false已经被jQuery废弃,后续建议改成异步Promise写法,先按你的需求适配
    success: function(response){
        // 遍历接口返回的数据,把时间值推入对应数组
        for (var i = 0; i < response.response.data.length; i++) {
            array1.push(response.response.data[i].start_time);
            array2.push(response.response.data[i].end_time);
        }

        // 步骤2:正确排序数组
        // 数字排序必须返回a-b(升序)或b-a(降序),之前return a>b的写法会返回布尔值,排序逻辑会出错
        array1.sort(function(a, b) {
            return a - b;
        });
        array2.sort(function(a, b) {
            return a - b;
        });

        // 步骤3:填充到下拉选框
        var $dropdown = $('#dropdown');
        // 这里默认把对应下标的start和end配对成时间段选项,你可以根据需求调整显示文本
        array1.forEach(function(start, index) {
            var end = array2[index];
            // 把秒级时间戳转成易读的小时格式,比如28800秒=8小时
            var optionText = (start/3600) + "时 - " + (end/3600) + "时";
            var $option = $('<option>').val(start + '-' + end).text(optionText);
            $dropdown.append($option);
        });
    }
});

额外优化建议

  • 别再用async: false了,它会阻塞浏览器主线程,影响页面体验。jQuery的Ajax返回的是Promise,你可以改成异步写法:
var array1 = [];
var array2 = [];

$.ajax({
    url:"/api/v1/workingspots",
    type: "GET",
    dataType: 'json'
}).done(function(response){
    // 收集数据、排序、填充下拉框的逻辑全部放在这里
}).fail(function(err){
    console.error('请求接口出错:', err);
});
  • 排序函数里一定要返回数字(负数、0、正数),return a > b这种返回布尔值的写法会让排序结果混乱,必须用return a - b(升序)或者return b - a(降序)。

内容的提问来源于stack exchange,提问作者gourav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:18:57