You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中按选中列表对数组排序?

解决方案

针对你的需求,核心是把选中元素移到数组最前方,剩余元素保持原有顺序,这里提供两种通用实现方式:

方式一:保持选中元素在原数组中的相对顺序

如果不需要关心selectedList的顺序,只需要把所有选中元素移到前面,这个方法最简洁:

const initArray = [
  { id: 0 },
  { id: 1 },
  { id: 2 },
  { id: 3 },
];

const selectedList = [ { id: 2 } ];

// 提取选中id的集合,提升查找效率
const selectedIds = new Set(selectedList.map(item => item.id));

// 拆分原数组为选中元素和未选中元素
const selectedItems = initArray.filter(item => selectedIds.has(item.id));
const unselectedItems = initArray.filter(item => !selectedIds.has(item.id));

// 合并得到结果
const output = [...selectedItems, ...unselectedItems];
console.log(output);
// 输出:[{id:2}, {id:0}, {id:1}, {id:3}]

方式二:严格按照selectedList的顺序排列选中元素

如果selectedList的顺序有要求(比如选中列表是[{id:3}, {id:2}],需要先展示3再展示2),可以用映射表实现:

const initArray = [
  { id: 0 },
  { id: 1 },
  { id: 2 },
  { id: 3 },
];

const selectedList = [ { id: 2 } ];

// 建立id到元素的映射,快速查找
const itemMap = new Map(initArray.map(item => [item.id, item]));

// 按选中列表的顺序提取元素,同时过滤原数组中不存在的元素
const selectedItems = selectedList
  .map(item => itemMap.get(item.id))
  .filter(Boolean);

// 筛选未选中的元素,保持原顺序
const unselectedItems = initArray.filter(item => !selectedItems.includes(item));

// 合并结果
const output = [...selectedItems, ...unselectedItems];
console.log(output);
// 输出:[{id:2}, {id:0}, {id:1}, {id:3}]

两种方法都能满足你的需求,根据实际场景选择即可。

内容的提问来源于stack exchange,提问作者Zuet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 13:31:13