如何按指定字符串值对JavaScript对象数组进行排序?
按指定字符串值排序对象数组
你可以利用JavaScript的Array.sort()方法,通过自定义比较函数实现这个需求。核心逻辑是在比较函数中判断对象的country字段是否为目标值(这里是'Canada'),返回对应的排序权重即可。
基础实现:将Canada排在最前面
const stores = [ {id: 1, name: 'Store1', country: 'USA'}, {id: 2, name: 'Store2', country: 'Canada'}, {id: 3, name: 'Store3', country: 'USA'}, {id: 4, name: 'Store4', country: 'Canada'} ]; const sortedStores = stores.sort((a, b) => { // 如果a是Canada、b不是,a排前面 if (a.country === 'Canada' && b.country !== 'Canada') { return -1; } // 如果b是Canada、a不是,b排前面 if (b.country === 'Canada' && a.country !== 'Canada') { return 1; } // 相同country的保持原数组顺序 return 0; }); console.log(sortedStores); // 输出结果: // [ // {id: 2, name: 'Store2', country: 'Canada'}, // {id: 4, name: 'Store4', country: 'Canada'}, // {id: 1, name: 'Store1', country: 'USA'}, // {id: 3, name: 'Store3', country: 'USA'} // ]
扩展:支持多优先级排序
如果后续需要按多个指定字符串顺序排序(比如先Canada,再USA,其他国家最后),可以用优先级数组简化逻辑:
const priorityOrder = ['Canada', 'USA']; const sortedStores = stores.sort((a, b) => { // 获取当前country在优先级数组中的索引,不在数组里的设为数组长度(排最后) const aPriority = priorityOrder.indexOf(a.country) !== -1 ? priorityOrder.indexOf(a.country) : priorityOrder.length; const bPriority = priorityOrder.indexOf(b.country) !== -1 ? priorityOrder.indexOf(b.country) : priorityOrder.length; return aPriority - bPriority; });
内容的提问来源于stack exchange,提问作者navin1551
相关产品推荐
相关产品推荐

