防止在Javascript中使用for进行循环排序
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在循环中按关键字排序?
我意识到循环中的for不能保证排序顺序,那么我该如何解决这个问题呢?我需要访问密钥和类型。我是否应该使用不同类型的数组和/或循环?
此外,为了进一步澄清,如果有区别的话,我的实际代码中的JSON数组来自PHP使用JSON_encode的AJAX请求。
您没有数组,您有一个对象。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);
}
如何防止for在循环中按关键字排序?
你不能。迭代顺序是未指定的,并且实现依赖于1。如果需要按预定义的顺序遍历数据,请改用数组。
1:大多数流行的浏览器都会按升序迭代数字属性,然后按插入顺序迭代非数字属性,但这也是一个实现细节。
如果您没有访问服务器的权限,但密钥的顺序是有保证的,您可以尝试以下操作:
按照你想要的顺序映射密钥,并以此方式循环
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]])
}
相关文章:
- 为什么JavaScript在for循环为3时向所有4发出警报
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 我的javascript for循环不起作用
- For循环冻结Javascript
- 如何在for循环中添加事件侦听器
- 双“for”循环(循环)
- javascript for循环不起作用
- for循环中的javascript if语句找不到==
- Javascript在for循环中等待处理请求
- For循环在Jquery中只运行一次
- 如何在for循环中使用计数器
- for循环中的JavaScript闭包
- 为什么我们在ES2015中需要一个新的for循环结构,而我们已经有了for、forEach
- For循环在调用时未运行
- 如何使用for循环添加所有按钮'单击事件
- 如何更改在for循环中生成的圆的位置
- 为什么这个For循环会使浏览器实验室崩溃
- 为什么我使用javascript获得了一个无限的for循环
- 在for循环中使用多维数组设置google.maps.Marker图标
- 如何在angularJS中运行for循环而不使用html标记