在JavaScript中对数组重新排序:按balance属性降序排列
实现按balance属性降序排序的reorder函数
没问题,这事儿很简单——咱们可以利用JavaScript数组内置的sort()方法,结合自定义的比较函数来实现你需要的reorder函数。
核心实现思路
sort()方法接受一个比较函数,这个函数会接收两个待比较的数组元素a和b:
- 如果返回正数,
b会被排在a前面 - 如果返回负数,
a会被排在b前面 - 返回0则位置不变
要实现降序排列(balance从大到小),只需要返回b.balance - a.balance即可。另外,为了避免修改原始数组,我们可以先创建数组的副本再排序。
完整代码实现
function reorder(arr) { // 用扩展运算符创建数组副本,避免修改原数组 return [...arr].sort((a, b) => b.balance - a.balance); }
使用示例
// 原始数组 var arr = [ {name: 'a', surname: 'a', balance: 10}, {name: 'b', surname: 'b', balance: 21}, {name: 'c', surname: 'c', balance: 43}, {name: 'd', surname: 'd', balance: 47} ]; // 调用reorder函数重新排序 arr = reorder(arr); console.log(arr); // 输出结果: // [ // {name: 'd', surname: 'd', balance: 47}, // {name: 'c', surname: 'c', balance: 43}, // {name: 'b', surname: 'b', balance: 21}, // {name: 'a', surname: 'a', balance: 10} // ]
额外处理:兼容balance缺失或非数值的情况
如果你的数组里可能存在balance属性不存在、或者值不是数字的元素,可以加个兜底逻辑,把这类元素排到最后:
function reorder(arr) { return [...arr].sort((a, b) => { // 给缺失/非数值的balance设置一个极小值,让它们排在末尾 const balanceA = typeof a.balance === 'number' ? a.balance : -Infinity; const balanceB = typeof b.balance === 'number' ? b.balance : -Infinity; return balanceB - balanceA; }); }
内容的提问来源于stack exchange,提问作者ArtX
相关产品推荐
相关产品推荐

