TypeScript Angular中指定数组开头元素的排序实现
自定义数组排序实现方法
实现思路
不需要额外循环,直接利用Array.sort()的比较函数,通过优先级映射就能让指定元素按要求前置:
- 给
'SVEN'、'DSVEN'、'VEN'分别设置递增的优先级数值(数值越小排序越靠前) - 比较两个元素时,用它们的优先级差值决定排序顺序
- 非指定元素统一赋予更高优先级,确保排在后面
代码实现
let array = ['RANDOM', 'TEST', 'DSVEN','VEN','TEST','SVEN']; // 定义前置元素的优先级映射 const priority = { 'SVEN': 1, 'DSVEN': 2, 'VEN': 3 }; // 自定义排序比较函数 array.sort((a, b) => { // 获取当前元素的优先级,默认值设为4(保证排在指定元素之后) const rankA = priority[a] || 4; const rankB = priority[b] || 4; // 通过优先级差值实现排序 return rankA - rankB; }); console.log(array); // 输出结果:["SVEN", "DSVEN", "VEN", "RANDOM", "TEST", "TEST"]
可选优化:保持非指定元素的原顺序
原生Array.sort()部分浏览器实现为不稳定排序,如果需要让非指定元素保持原数组的相对顺序,可以结合索引处理:
let array = ['RANDOM', 'TEST', 'DSVEN','VEN','TEST','SVEN']; const priority = { 'SVEN': 1, 'DSVEN': 2, 'VEN': 3 }; // 给元素绑定原索引,用于稳定排序 const indexedArray = array.map((item, idx) => ({ item, idx })); indexedArray.sort((a, b) => { const rankA = priority[a.item] || 4; const rankB = priority[b.item] || 4; // 优先级不同按优先级排序,相同则按原索引保持顺序 return rankA !== rankB ? rankA - rankB : a.idx - b.idx; }); // 提取排序后的原元素 const sortedArray = indexedArray.map(item => item.item); console.log(sortedArray);
内容的提问来源于stack exchange,提问作者Miomir Dancevic
相关产品推荐
相关产品推荐

