今天我在编写一些代码时,我意识到我不能够进行以下操作:
x.push(5, 9).sort(); //错误的写法
x.sort(x.push(5, 9)); //错误的写法
而需要进行以下操作:
x.push(5, 9);
x.sort();
我在想有没有办法把它变成一行? 此外,以下两行之间有什么区别?
x.sort((a, b) => a - b);
x.sort();
今天我在编写一些代码时,我意识到我不能够进行以下操作:
x.push(5, 9).sort(); //错误的写法
x.sort(x.push(5, 9)); //错误的写法
而需要进行以下操作:
x.push(5, 9);
x.sort();
x.sort((a, b) => a - b);
x.sort();
.push
方法返回的是数组新的长度而不是变异后的数组。如果你想要同时执行推入(push) 和排序(sort),可以考虑创建一个新的数组,然后对其进行排序。
const sortedArr = [...arr, 5, 9].sort();
// or, .sort((a, b) => a - b)
.sort()
没有参数时,它将按字典序比较每个数组项进行排序,结果可能不太直观,例如:[1, 11, 2]
。
自定义回调函数可以让你自定义行为 - 当将数组元素与另一个元素进行比较时,回调函数被调用,返回值是负数、正数或0决定这两个元素在其他元素的相对位置上是否需要排序。因此,当对数字数组进行数值排序时,总是要使用像 (a, b) => a - b
这样的函数。
另一种在一行中进行推送和排序的方法是使用concat
创建一个新数组,然后对其进行排序:
const arr = [1, 6, 10]
const sortedArr = arr.concat([5, 9]).sort((a, b) => a - b)
console.log(sortedArr)
正如@CertainPerformance已经指出的那样,您必须使用回调函数来正确地将数字值排序,因为将数字作为字符串进行排序会产生不正确的结果。
[-11, -2, -1, 0, 1, 2, 11].sort()
的结果是[-1, -11, -2, 0, 1, 11, 2]
,这并不理想。 - CertainPerformance.sort()
在对数字进行排序时无法正常工作,无论这些数字是正数还是负数。 - CertainPerformance[-20,-11,0,2,11].sort() //=> [ -11, -20, 0, 11, 2 ]
。 - Mark Reed