##数据场景 在处理类似这样的Json对象时: ```json { "AED": "United Arab Emirates Dirham", "AFN": "Afghan Afghani", "ALL": "Albanian Lek", "AMD": "Armenian Dram", "ANG": "Netherlands Antillean Guilder", "AOA": "Angolan Kwanza", "ARS": "Argentine Peso", "AUD": "Australian Dollar", "BSD": "Bahamian Dollar", "BTC": "Bitcoin", "BTN": "Bhutanese Ngultrum", "CNH": "Chinese Yuan (Offshore)", "CNY": "Chinese Yuan", "COP": "Colombian Peso", "CRC": "Costa Rican Colón", "CUC": "Cuban Convertible Peso", "CUP": "Cuban Peso", "CVE": "Cape Verdean Escudo", "CZK": "Czech Republic Koruna", "DJF": "Djiboutian Franc", "DKK": "Danish Krone", "JEP": "Jersey Pound", "JMD": "Jamaican Dollar", "JOD": "Jordanian Dinar", "JPY": "Japanese Yen", "KES": "Kenyan Shilling", "KGS": "Kyrgystani Som", "KHR": "Cambodian Riel", "KMF": "Comorian Franc", "KPW": "North Korean Won", "MWK": "Malawian Kwacha", "MXN": "Mexican Peso", "MYR": "Malaysian Ringgit", "MZN": "Mozambican Metical", "NAD": "Namibian Dollar", "NGN": "Nigerian Naira", "NIO": "Nicaraguan Córdoba", "NOK": "Norwegian Krone", "NPR": "Nepalese Rupee", "NZD": "New Zealand Dollar", "OMR": "Omani Rial" } ``` 可见key已经是有序的了,然后在JavaScript中使用常规的forin去遍历,结果显示的顺序和给过来的顺序不一致。 ##原因 这是因为Json数据是无序的键值对,而数组是有序的,直接forin遍历肯定就是无序的。 ##解决方法 先将Json对象转为map对象,使用map对象sort方法进行按key值排序,然后再转为数据或者直接遍历处理,结果才是有序的。 ** 这里截取我在傻妞插件中使用的方法来说明 ** ```javascript //data为接收到的Json对象 data={"keys":"values"}; //每次返回均为有序 let stringMap = new Map(); for (const key in data) { stringMap.set(key, data[key]); } countryList = Array.from(stringMap).sort((a, b) => { return a[0].localeCompare(b[0]) }) countryList.forEach(v => { Debug(v) }) //每次返回均为无序 let index=1; for (key in data) { if (index % 45 == 0) { msgString = msgString.join("\n"); sendText(msgString); msgString = []; } msgString.push(index + ". (" + key + ") - " + data[key]); index++; } ``` Last modification:January 28, 2022 © Allow specification reprint Support Appreciate the author AliPayWeChat Like 0 If you think my article is useful to you, please feel free to appreciate