让jquery不要对关联数组进行排序

时间:2018-01-29 20:51:57

标签: javascript jquery arrays sorting associative-array

如何阻止JavaScript对关联数组进行排序?我需要数字中关联数组的键,或数字作为字符串,因为数组是动态创建的。由于某些原因,JS继续为我排序,这导致我的问题。顺便说一句,我使用的是jquery-2.0.3.min.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 个答案:

答案 0 :(得分:2)

以不同方式存储数据怎么样?而不是由键:值对组成的对象,使其成为由值:位置对组成的数组:

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
 */

答案 1 :(得分:1)

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

在没有jQuery .each功能的情况下查看此代码段:

&#13;
&#13;
//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);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<span id="output"></span>
&#13;
&#13;
&#13;

请参阅?没有jQuery,键正在被排序。

以下代码段显示了如何使用Map类保留广告订单:

&#13;
&#13;
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);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<span id="output"></span>
&#13;
&#13;
&#13;

请参阅?现在它遵循了插入顺序。