如何使用JS的sort方法将指定数组对象移动到数组首位
解决方案
Array.sort 比较函数的返回值规则为:返回负数时a排在b前,返回正数时b排在a前,返回0时保持原有相对顺序。你原有逻辑错误的原因是只要任意一个元素匹配就返回1,会导致匹配项被排列到数组末尾。
修正后的实现代码如下:
const arr = [{ id: 'a', name: 'test name 1' }, { id: 'b', name: 'test name 2' }, { id: 'c', name: 'test name 3' } ]; const testId = 'c'; // 注意sort是原地排序,先用展开运算符复制原数组避免修改原数组 const sortedArr = [...arr].sort((a, b) => { // a匹配、b不匹配,a放前面 if (a.id === testId && b.id !== testId) return -1; // b匹配、a不匹配,b放前面 if (b.id === testId && a.id !== testId) return 1; // 都匹配/都不匹配,保持原有相对顺序 return 0; }); console.log(sortedArr); // 输出顺序:[{id: 'c', ...}, {id: 'a', ...}, {id: 'b', ...}] 符合预期
该逻辑也支持多个匹配项的场景,所有符合条件的元素都会被优先排列在数组头部,非匹配项保留原有的先后顺序。
内容的提问来源于stack exchange,提问作者firatozcevahir
相关产品推荐
相关产品推荐

