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

如何将指定数组包含的对象元素排到列表末尾(支持lodash/原生JS)

错误原因

你的排序权重写反了。_.sortBy 是按迭代函数返回值从小到大排序的,你给uid在found里的项返回0(更小值)、不在的返回1(更大值),结果自然是匹配到的项排到最前面,和你要放去末尾的需求刚好反过来。
另外如果found数组长度比较大,反复调用Array.includes()查找的效率很低,建议先转成Set存储目标uid,查找复杂度可以从O(n)降到O(1),性能更好。

实现方案

Lodash 修正写法

把权重返回值调换即可,匹配到found的项返回更大的权重值,就会被排到列表尾部:

const foundSet = new Set(found);
const setItemsLast = _.sortBy(attendList, ({ uid }) => foundSet.has(uid) ? 1 : 0);

原生JS写法

如果不想引入lodash,可以用原生数组的sort方法实现,注意先浅拷贝原数组避免修改原始数据:

const foundSet = new Set(found);
const setItemsLast = [...attendList].sort((itemA, itemB) => {
  const weightA = foundSet.has(itemA.uid) ? 1 : 0;
  const weightB = foundSet.has(itemB.uid) ? 1 : 0;
  return weightA - weightB;
});

上述两种实现都是稳定排序,非目标项、目标项组内的原有相对顺序都会被保留,符合常规业务需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 16:01:05