如何编写函数按指定字段值优先排序对象数组?
实现指定字段优先排序的函数
核心思路就是利用数组的sort()方法,自定义比较逻辑,让匹配目标值的元素优先排列。
具体实现代码
function prioritizeByField(arr, field, targetValue) { // 注意:sort会修改原数组,如需保留原数组可以先复制一份:[...arr].sort(...) return arr.sort((a, b) => { const aMatches = a[field] === targetValue; const bMatches = b[field] === targetValue; if (aMatches && !bMatches) { return -1; // 匹配的元素排前面 } if (!aMatches && bMatches) { return 1; // 让另一个匹配元素排前面 } // 都匹配或都不匹配时,保持原数组的相对顺序 return 0; }); }
示例使用
比如你的原始数组:
const originalArray = [ {id: '1', nazwa: 'Example', lokalizacja: 'Example', klucz: 'Example', edit: '0'}, {id: '2', nazwa: 'Example', lokalizacja: 'Example', klucz: 'Example', edit: '0'}, {id: '2', nazwa: 'Example', lokalizacja: 'Example', klucz: 'Example', edit: '0'}, {id: '3', nazwa: 'Example', lokalizacja: 'Example', klucz: 'Example', edit: '0'} ]; // 让id为'2'的元素优先排列 const sortedArray = prioritizeByField(originalArray, 'id', '2'); console.log(sortedArray);
输出结果就会和你期望的一致:
[ {id: '2', nazwa: 'Example', lokalizacja: 'Example', klucz: 'Example', edit: '0'}, {id: '2', nazwa: 'Example', lokalizacja: 'Example', klucz: 'Example', edit: '0'}, {id: '1', nazwa: 'Example', lokalizacja: 'Example', klucz: 'Example', edit: '0'}, {id: '3', nazwa: 'Example', lokalizacja: 'Example', klucz: 'Example', edit: '0'} ]
额外说明
- 如果不想修改原数组,记得在排序前复制一份,比如用
[...arr]或者arr.slice()创建副本再排序。 - 如果需要非优先的元素也按该字段排序(比如剩下的按id升序),可以把最后返回0的地方改成:
return a[field].localeCompare(b[field]); // 字符串排序,数字类型直接用 a[field] - b[field]
内容的提问来源于stack exchange,提问作者SEO fKings
相关产品推荐
相关产品推荐

