JavaScript数组按text排序时如何固定id为-1、0的元素始终置顶
JS数组指定元素固定置顶+剩余元素按字段排序实现
你可以在sort比较函数里先区分置顶元素和普通元素,分层判断排序规则即可,完整代码如下:
const d = [ { id: 20, text: 'deaf' }, { id: 30, text: 'acta' }, { id: 0, text: 'deema1' }, { id: -1, text: 'deema2' }, ]; // 配置需要固定置顶的id const pinnedIds = new Set([-1, 0]); d.sort((a, b) => { const isAPinned = pinnedIds.has(a.id); const isBPinned = pinnedIds.has(b.id); // 置顶元素优先级高于普通元素 if (isAPinned && !isBPinned) return -1; if (!isAPinned && isBPinned) return 1; // 两个都是置顶元素:按id升序排列,保证-1在0前面 if (isAPinned && isBPinned) return a.id - b.id; // 两个都是普通元素:按text字段排序 return a.text.localeCompare(b.text); }) console.log(d);
运行后输出的结果和预期完全一致:
[ { id: -1, text: 'deema2' }, { id: 0, text: 'deema1' }, { id: 30, text: 'acta' }, { id: 20, text: 'deaf' }, ]
- 逻辑说明:
- 优先判断元素是否属于置顶分组,置顶组元素永远排在非置顶组前面
- 同组元素再按对应规则排序:置顶组按id升序,普通组按text字段做本地化比较排序
- 如果后续需要调整置顶元素,直接修改
pinnedIds集合即可,不需要改动核心排序逻辑
内容的提问来源于stack exchange,提问作者coure2011
相关产品推荐
相关产品推荐

