javascript关联数组顺序混乱,怎么办?

JavaScript07

javascript关联数组顺序混乱,怎么办?,第1张

javascript 是通过对象来实现的 map 功能,枚举其属性时是无序的。其实多数语言的 map 为了提高检索效率都是进行了一定的排序,都不是按插入元素的顺序来枚举的,除非专门实现的 SortedMap 之类。

如果你需要查找,也需要顺序,数据少可以直接用数组

var dataList = [{

key: '01',

value: '01'

}, {

key: '02',

value: '02'

}, {

key: '10',

value: '10'

}, {

key: '11',

value: '11'

}, {

key: '21',

value: '21'

}]

// 通过遍历查找数据,如找 "11"

var v = (function(data, k) {

for (var i = 0, length = data.lengthi <lengthi++) {

if (data[i].key === k) {

return data[i].value

}

}

})(dataList, "11")

如果数据比较多,可以使用 object + array 的办法,比如

全选复制放进笔记var data = {

map: {

'01': '01',

'02': '02',

'10': '10',

'11': '11',

'21': '21'

},

order: [

"01", "02", "10", "11", "21"

]

}

遍历数据可以这样

data.order.forEach(function(key) {

console.log(key + " = " + data.map[key])

})

#Map转json数据出现顺序乱的问题,如果需要保持顺序,可以使用JSONObject 对象的toString()方法;

public static void main(String[] args) {

    Map<String, String>map = new LinkedHashMap<String, String>()

    map.put("3", "ccccc")

    map.put("1", "aaaaa")

    map.put("2", "bbbbb")

    map.put("4", "ddddd")

    System.out.println("默认自动排序")

    System.out.println(ResultVOUtil.success(map))

输出结果:

自动排序

{"msg":"成功","code":"0","data":{"1":"aaaaa","2":"bbbbb","3":"ccccc","4":"ddddd"}}

 //////////////////////////////////解决方案/////////////////////////////////////////////////////

    JSON json = JSONUtil.parse(map)

    JSONObject obj = new JSONObject()

    obj.put("code", '0')

    obj.put("msg", "成功")

    obj.put("data", json)

    System.out.println("保持原始顺序")

    System.out.println(obj.toString())

  }

输出结果:

保持原始顺序

{"msg":"成功","code":"0","data":{"3":"ccccc","1":"aaaaa","2":"bbbbb","4":"ddddd"}}

Map本身是无序的解决的办法就是将有序的数据结构放到Map中去;例如:

ResultSet rs = ..//查询

List<Map<String, String>>temp = new LinkedList(Map<String, String>)

while(rs.next()){

//读取该条数据,返回字段名与字段值的Map

Map<String, String>m = read(rs)

temp.add(m)

}

//将结果放到Map中

application.put("ResultList", temp)