如何自定义排序对象数组中对象的键顺序?
自定义对象数组中对象键的排序方案
你需要对数组中每个对象的键按指定顺序重新排列,不需要依赖索引长度降序,而是通过自定义优先级规则就能实现需求。
原数组
var array = [ { "1": 1223, "3": 1224, "2": 1225, "some_field": "Name1", "row": 1, "col": 1 }, { "3": 10, "2": 11, "1": 12, "some_field": "Name2", "row": 2, "col": 1 } ]
期望输出
[ { "some_field": "Name1", "row": 1, "col": 1, "1": 1223, "2": 1224, "3": 1225 }, { "some_field": "Name2", "row": 2, "col": 1, "1": 10, "2": 11, "3": 12 } ]
实现方案
方案1:固定键顺序(适用于键数量固定的场景)
直接定义好期望的键顺序,遍历每个对象并按顺序重构新对象:
const array = [ // 原数组内容 ]; // 明确指定键的优先级顺序 const keyOrder = ['some_field', 'row', 'col', '1', '2', '3']; // 处理数组中的每个对象 const sortedArray = array.map(obj => { const sortedObj = {}; keyOrder.forEach(key => { if (obj.hasOwnProperty(key)) { sortedObj[key] = obj[key]; } }); return sortedObj; }); // 输出结果 console.log(JSON.stringify(sortedArray, null, 2));
方案2:动态处理数字键(适用于数字键数量不固定的场景)
如果后续可能出现更多数字键(比如"4"、"5"),可以自动提取数字键并按数值排序,再和固定键合并:
const array = [ // 原数组内容 ]; // 固定要排在前面的键 const fixedKeys = ['some_field', 'row', 'col']; const sortedArray = array.map(obj => { // 提取所有数字键并按数值升序排列 const numberKeys = Object.keys(obj) .filter(key => !isNaN(Number(key))) .sort((a, b) => Number(a) - Number(b)); // 合并固定键和排序后的数字键 const combinedKeyOrder = [...fixedKeys, ...numberKeys]; // 构建排序后的对象 const sortedObj = {}; combinedKeyOrder.forEach(key => { sortedObj[key] = obj[key]; }); return sortedObj; }); // 输出结果 console.log(JSON.stringify(sortedArray, null, 2));
关键说明
不需要利用索引长度降序,你的需求核心是固定非数字键的优先级,数字键按数值顺序排列,通过上述两种方案都能精准实现。
内容的提问来源于stack exchange,提问作者JSG
相关产品推荐
相关产品推荐

