在 javascript 中排序后,如何使数组中的一个项目出现在另一个项目之前
How can I make an item in an array come before another after sorting in javascript
我得到了一个要排序的数组,但在对数组排序后,一个特定元素应该排在另一个元素之前。
var array = ['Jack', 'Queen', 'King', 1,3, 2, 4, 5, 6, 7];
输出应该是 // 1,2,3,4,5,6,7,Jack,Queen,King
其中女王会先于国王
我的解决方案:
var array = ['Jack', 'Queen', 'King', 1,3, 2, 4, 5, 6, 7];
array.sort()
console.log(array); ```
But my output is:
```[1, 2, 3, 4, 5, 6, 7, 'Jack', 'King', 'Queen'] ```
字母Q在字母表中的字母K之后
所以排序工作正常(按字母顺序排列)如果你想让它以其他方式排序你应该创建自定义排序。
在此处查看比较部分:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
而且我还建议采用不同的方法使地图数组带有“卡片”,因为我认为这就是您想要正确排序的内容,只需比较该数组或键值映射中的索引。带有自定义比较函数和卡片值映射的示例。
const cardValueMap = {
2: 2,
3: 3,
4: 4,
5: 5,
6: 6,
7: 7,
8: 8,
9: 9,
10: 10,
Jack: 11,
Queen: 12,
King: 13,
Ace: 14,
}
const array = ['Jack', 'Queen', 'King', 3, 2, 4, 5, 6, 7]
const compareCards = (a, b) => {
if (cardValueMap[a] < cardValueMap[b]) {
return -1
}
if (cardValueMap[a] > cardValueMap[b]) {
return 1
}
return 0
}
array.sort(compareCards)
console.log(array)
可以通过检查 typeof a
/ typeof b
升级为不必在地图中包含数字。
请注意,我还从您的数组中删除了“1”,因为没有编号为 1 的卡片。
将 Jack
、Queen
和 King
映射到数字,对整数数组进行排序,然后将 Jack
、Queen
和 [= 的数字反向映射13=].
var array = ['Jack', 'Queen', 'King', 1, 3, 2, 4, 5, 6, 7];
const ans = array
.map(x => {
if (x === 'Jack') return 10;
else if (x === 'Queen') return 11;
else if (x === 'King') return 12;
return x;
})
.sort((a, b) => a - b)
.map(x => {
if (x === 10) return 'Jack';
else if (x === 11) return 'Queen';
else if (x === 12) return 'King';
return x;
});
console.log(ans);
我得到了一个要排序的数组,但在对数组排序后,一个特定元素应该排在另一个元素之前。
var array = ['Jack', 'Queen', 'King', 1,3, 2, 4, 5, 6, 7];
输出应该是 // 1,2,3,4,5,6,7,Jack,Queen,King
其中女王会先于国王 我的解决方案:
var array = ['Jack', 'Queen', 'King', 1,3, 2, 4, 5, 6, 7];
array.sort()
console.log(array); ```
But my output is:
```[1, 2, 3, 4, 5, 6, 7, 'Jack', 'King', 'Queen'] ```
字母Q在字母表中的字母K之后 所以排序工作正常(按字母顺序排列)如果你想让它以其他方式排序你应该创建自定义排序。
在此处查看比较部分:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort 而且我还建议采用不同的方法使地图数组带有“卡片”,因为我认为这就是您想要正确排序的内容,只需比较该数组或键值映射中的索引。带有自定义比较函数和卡片值映射的示例。
const cardValueMap = {
2: 2,
3: 3,
4: 4,
5: 5,
6: 6,
7: 7,
8: 8,
9: 9,
10: 10,
Jack: 11,
Queen: 12,
King: 13,
Ace: 14,
}
const array = ['Jack', 'Queen', 'King', 3, 2, 4, 5, 6, 7]
const compareCards = (a, b) => {
if (cardValueMap[a] < cardValueMap[b]) {
return -1
}
if (cardValueMap[a] > cardValueMap[b]) {
return 1
}
return 0
}
array.sort(compareCards)
console.log(array)
可以通过检查 typeof a
/ typeof b
升级为不必在地图中包含数字。
请注意,我还从您的数组中删除了“1”,因为没有编号为 1 的卡片。
将 Jack
、Queen
和 King
映射到数字,对整数数组进行排序,然后将 Jack
、Queen
和 [= 的数字反向映射13=].
var array = ['Jack', 'Queen', 'King', 1, 3, 2, 4, 5, 6, 7];
const ans = array
.map(x => {
if (x === 'Jack') return 10;
else if (x === 'Queen') return 11;
else if (x === 'King') return 12;
return x;
})
.sort((a, b) => a - b)
.map(x => {
if (x === 10) return 'Jack';
else if (x === 11) return 'Queen';
else if (x === 12) return 'King';
return x;
});
console.log(ans);