代码之家  ›  专栏  ›  技术社区  ›  xam

让jquery不对关联数组排序

  •  0
  • xam  · 技术社区  · 7 年前

    如何防止JavaScript对关联数组排序?我需要以数字或字符串形式显示关联数组的键,因为数组是动态创建的。由于某些原因,JS一直为我排序,这给我带来了问题。顺便说一句,我正在使用jquery-2.0.3。最小js:

    HTML

    <div id='output'></div>
    

    JavaScript

    //define array
    var myUnsortArray={};
    myUnsortArray[98+""]='first';
    myUnsortArray[99+""]='second';
    myUnsortArray[1+""]='third';
    myUnsortArray[2+""]='last';
    
    //output array
    var a="";
    $.each(myUnsortArray,function(key,value){a=a+key+": "+value+"<br/>";});
    $("#output").html(a);
    

    输出:

    1: third
    2: last
    98: first
    99: second
    

    首选输出:

    98: first
    99: second
    1: third
    2: last
    

    提前感谢您!

    2 回复  |  直到 7 年前
        1
  •  2
  •   CodeAt30    7 年前

    如何以不同的方式存储数据?不是由键:值对组成的对象,而是由值:位置对组成的数组:

    let unsorted = [];
    unsorted.push({value:"first", pos:"98"});
    unsorted.push({value:"second", pos:"99"});
    unsorted.push({value:"third", pos:"1"});
    unsorted.push({value:"last", pos:"2"});
    
    //output array
    console.log(unsorted);
    
    var a ="";
    $.each(unsorted,function(index, item){
            console.log(item.value);
            a = a + item.pos + ": " + item.value + "<br/>";
        });
    
    $("#output").html(a);
    
    /* Output:
     * 98: first
     * 99: second
     * 1: third
     * 2: last
     */
    
        2
  •  1
  •   halfer    7 年前

    jQuery不排序,这是Javascript在某些浏览器中的特定行为,因此无法确保插入顺序。

    查看不带jQuery的代码段 .each 功能:

    //define array
    var myUnsortArray = {};
    myUnsortArray[98 + ""] = 'first';
    myUnsortArray[99 + ""] = 'second';
    myUnsortArray[1 + ""] = 'third';
    myUnsortArray[2 + ""] = 'last';
    
    //output array
    var a = "";
    for (key in myUnsortArray) {
      a = a + key + ": " + myUnsortArray[key] + "<br/>";
    }
    
    $("#output").html(a);
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
    <span id="output"></span>

    看见如果没有jQuery,则会对键进行排序。

    下面的代码片段显示了如何使用 Map 类别:

    var myUnsortMap = new Map();
    myUnsortMap.set('98', 'first');
    myUnsortMap.set('99', 'second');
    myUnsortMap.set('1', 'third');
    myUnsortMap.set('2', 'last');
    
    //output array
    var a = "";
    for (var [key, value] of myUnsortMap) {
      a = a + key + ": " + value + "<br/>";
    }
    
    $("#output").html(a);
    <脚本src=”https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js“></script>
    <span id=“输出”></跨度(>);

    看见现在它遵循插入顺序。