[英]Prevent sorting with for-in loop in Javascript
我有以下按类型(而非ID)排序的JSON数组。
var response = {"5":"Contacts","2":"Messages","3":"Profiles","1":"Schools","4":"Statistics"};
for (var key in response) {
alert(key + ' ' + response[key]);
}
我希望订单保持原样,但是正在发生的事情是按ID对其进行排序,以便它首先生成“ 1所学校”。 如何防止for-in循环按键排序?
我意识到不能使用for-in循环来保证排序顺序,那么如何解决呢? 我需要访问密钥和类型。 我应该使用其他类型的数组和/或循环吗?
另外,为了进一步说明问题,以防万一,我的实际代码使用来自JSON_encode的PHP AJAX请求提供了JSON数组。
如何防止for-in循环按键排序?
你不能 迭代顺序未指定,实现取决于1 。 如果需要按预定义的顺序遍历数据,请改用数组。
1:大多数流行的浏览器将按升序对数字属性进行迭代,然后按插入顺序对非数字属性进行迭代,但这再次是实现细节。
您没有数组,有一个对象。 使用javascript不能保证对象中的键顺序。 如果要排序的集合,则应使用实际的数组:
var response = [{"key":"5", "value":"Contacts"},{"key":"2", "value":"Messages"},{"key":"3", "value":"Profiles"},{"key":"1", "value":"Schools"},{"key":"4", "value":"Statistics"}];
for (var i =0; i < response.length; i++) {
alert(response[i].key + ' ' + response[i].value);
}
如果您无权访问服务器,但是可以保证密钥的顺序,则可以尝试以下操作:
按照您想要的顺序映射键并以这种方式循环
var response = {"5":"Contacts","2":"Messages","3":"Profiles","1":"Schools","4":"Statistics"};
var map = ["5","2","3","1","4"];
for(var i = 0; i < map.length;i++){
alert(i+' '+response[map[i]])
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.