AS3中无对象结构的关联数组如何按键排序?
如何对JavaScript关联对象按键排序?
嘿,你提到的这种“关联数组”在JavaScript里其实是普通对象(JS里并没有真正意义上的关联数组,键值对集合本质就是对象),要对它按键排序的话,可以按照下面的步骤操作:
第一步:提取所有键名
使用Object.keys()方法获取对象的全部键名,得到一个键名数组:const originalObj = {name1: [2,4,6], name2: [1,3], abc: [2,5,6]}; const keys = Object.keys(originalObj); // 此时keys的值是 ['name1', 'name2', 'abc']第二步:对键名数组排序
直接调用数组的sort()方法,默认会按照字符串的Unicode编码排序。如果需要更友好的排序(比如忽略大小写),可以传入自定义比较函数:// 默认排序(区分大小写) keys.sort(); // 结果:['abc', 'name1', 'name2'] // 忽略大小写的排序 keys.sort((a, b) => a.localeCompare(b, undefined, { sensitivity: 'base' }));第三步:构建有序的结果
你有两种选择,根据需求来选:- 生成有序对象:ES6及以后的JavaScript对象会保留键的插入顺序,所以可以用
reduce()方法重新构建对象:const sortedObj = keys.reduce((result, key) => { result[key] = originalObj[key]; return result; }, {}); // sortedObj的结构就是 {abc: [2,5,6], name1: [2,4,6], name2: [1,3]} - 转成你熟悉的对象数组:如果想转换成你提到的
[{"name": "...", "value": "..."}]格式,直接用map()方法即可:const sortedArray = keys.map(key => ({ name: key, value: originalObj[key] })); // 此时就可以用你熟悉的sortOn方法或者直接sort来处理了
- 生成有序对象:ES6及以后的JavaScript对象会保留键的插入顺序,所以可以用
需要注意的是:旧版本的JavaScript(ES6之前)不保证对象键的顺序,所以如果要兼容旧环境,更推荐转成对象数组的方式来处理排序~
内容的提问来源于stack exchange,提问作者bluelemonade
相关产品推荐
相关产品推荐

