javascript - 如何使用自定义顺序对对象数组进行排序?
问题描述
我有一个像这样的对象数组:
[
{keyword: 'E', value: '5'},
{keyword: 'C', value: '3'},
{keyword: 'B', value: '2'},
{keyword: 'D', value: '4'},
{keyword: 'A', value: '1'},
{keyword: 'F', value: '6'},
...
]
我从其他地方收到这个数组,我无法控制来源,它的顺序也可以是完全随机的。
现在我想按关键字的升序对数组进行排序,但交换 2 个对象除外。我知道要交换的对象的关键字,比如上面数组中的 C 和 D。所以我希望最终的结果是这样的:
[
{keyword: 'A', value: '1'},
{keyword: 'B', value: '2'},
{keyword: 'D', value: '4'},
{keyword: 'C', value: '3'},
{keyword: 'E', value: '5'},
{keyword: 'F', value: '6'},
...
]
我必须遵循代码,但我不知道将其余代码放在哪里。请帮忙!
myArray.sort(function(a, b){
return a.keyword.toLowerCase().localeCompare(b.keyword.toLowerCase());
});
解决方案
var myArray = [
{keyword: 'E', value: '5'},
{keyword: 'C', value: '3'},
{keyword: 'B', value: '2'},
{keyword: 'D', value: '4'},
{keyword: 'A', value: '1'},
{keyword: 'F', value: '6'}
];
var specialKeywords = [ 'C', 'D' ];
myArray.sort(function(a, b){
//if the two being compared are 'C' and 'D', treat them special
if (specialKeywords.indexOf(a.keyword) +1
&& specialKeywords.indexOf(b.keyword) +1) {
//if a is 'C', it needs to be greater than 'D'
if (a.keyword = 'C') return 1;
else return -1;
} else {
//one of the elements is not 'C' or 'D', process normally.
return a.keyword.toLowerCase().localeCompare(b.keyword.toLowerCase());
}
});
console.log(myArray);
推荐阅读
- typescript - 将对象类型转换为类型数组
- python - Python:从类中的方法向构造函数添加值
- c++ - wxProgressDialog 与 wxWidgets 3.1.3 一起崩溃
- scala - 返回超过 1 个错误的验证
- reactjs - 通过函数声明 setState
- node.js - Node.js 中的回调函数是什么?
- google-cloud-platform - 在 apache 气流中安装 Scrapy 会导致 INVALID_ARGUMENT
- java - (JAVA) 为我的自动售货机执行 while 循环
- android - 如何在 SharedPreference 中存储日期?
- python - TypeError:'NoneType' 对象不可下标 opencv-python / python face_recognition