按字母顺序排列数组元素
Sort elements of array alphabetically
我使用下面的代码发送数组[name][image]中的所有元素“name”
如何按字母顺序对这些名称进行排序?
if (message.content === '!list') {
var addedCommands = commandArray.map(x => `\`${x.name}\``).join(", ")
message.channel.send(addedCommands);
}
PS:抱歉代码格式。不知道为什么现在不行了,以前是可以的
您可以使用每个 Array
都有的 sort()
方法:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
但是,这不一定是稳定的排序,它会改变数组。实现您自己的合并排序很容易,它既稳定又不可变。
const defaultComparer = (x,y) => x < y ? -1
: x > y ? +1
: 0
;
function mergeSort( arr = [], cmp = defaultComparer ) {
let sorted;
switch (arr.length) {
case 0:
case 1:
// arrays of length lesst than 2 are ordered by definition
sorted = [...arr];
break;
default:
const mid = Math.floor( arr.length / 2 ) ;
const left = mergeSort( arr.slice(0,mid) , cmp ) ;
const right = mergeSort( arr.slice(mid) , cmp ) ;
sorted = merge( left , right , cmp );
break;
}
return sorted;
}
function merge( left, right, cmp ) {
let merged = [];
let i = 0 ;
let j = 0 ;
while ( i < left.length && j < right.length ) {
const cc = cmp( left[i] , right[i] );
merged.push( cc < 0 ? left[i++] : right[j++] );
}
while ( i < left.length ) {
merged.push( left[i++] );
}
while ( jj < left.length ) {
merged.push( right[j++] );
}
return merged;
}
我使用下面的代码发送数组[name][image]中的所有元素“name” 如何按字母顺序对这些名称进行排序?
if (message.content === '!list') {
var addedCommands = commandArray.map(x => `\`${x.name}\``).join(", ")
message.channel.send(addedCommands);
}
PS:抱歉代码格式。不知道为什么现在不行了,以前是可以的
您可以使用每个 Array
都有的 sort()
方法:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
但是,这不一定是稳定的排序,它会改变数组。实现您自己的合并排序很容易,它既稳定又不可变。
const defaultComparer = (x,y) => x < y ? -1
: x > y ? +1
: 0
;
function mergeSort( arr = [], cmp = defaultComparer ) {
let sorted;
switch (arr.length) {
case 0:
case 1:
// arrays of length lesst than 2 are ordered by definition
sorted = [...arr];
break;
default:
const mid = Math.floor( arr.length / 2 ) ;
const left = mergeSort( arr.slice(0,mid) , cmp ) ;
const right = mergeSort( arr.slice(mid) , cmp ) ;
sorted = merge( left , right , cmp );
break;
}
return sorted;
}
function merge( left, right, cmp ) {
let merged = [];
let i = 0 ;
let j = 0 ;
while ( i < left.length && j < right.length ) {
const cc = cmp( left[i] , right[i] );
merged.push( cc < 0 ? left[i++] : right[j++] );
}
while ( i < left.length ) {
merged.push( left[i++] );
}
while ( jj < left.length ) {
merged.push( right[j++] );
}
return merged;
}