Vanilla JavaScript 按对象属性排序数组的实现求助
按对象b属性升序排序数组的正确实现
正确代码实现
function arraySorter(arr) { // 先拷贝原数组避免修改原数据,再按b属性升序排序 return [...arr].sort((objA, objB) => objA.b - objB.b); } // 测试示例1 console.log(arraySorter([ { a: 1, b: 2 }, { a: 5, b: 4 }, ])); // 输出: [{a:1,b:2},{a:5,b:4}] // 测试示例2 console.log(arraySorter([ { a: 5, b: 4 }, { a: 2, b: 10 }, ])); // 输出: [{a:5,b:4},{a:2,b:10}]
原代码的问题分析
- 破坏原对象结构:你用
map把每个对象转成了值数组(比如{a:1,b:2}变成[1,2]),最终无法返回需求要求的对象格式数组。 - 错误使用filter:
filter是用来筛选数组元素的工具,不是排序方法,而且你的filter没有返回有效判断条件,最终会返回空数组,完全偏离任务目标。
代码逻辑说明
[...arr]:创建原数组的浅拷贝,因为sort()方法会直接修改原数组,这样做可以保留原数组的原始状态。sort((objA, objB) => objA.b - objB.b):数组的sort()方法接受一个比较函数,当返回值为负数时,objA排在objB前面;正数则objB在前;0则顺序不变。通过两个对象的b属性差值,刚好实现升序排序。
内容的提问来源于stack exchange,提问作者Bhaskar Deb
相关产品推荐
相关产品推荐

