gpt4 book ai didi

javascript - 对象数组的自定义排序顺序

转载 作者:数据小太阳 更新时间:2023-10-29 04:03:30 26 4
gpt4 key购买 nike

我知道我们可以定义 json 对象数组的自定义排序函数。但是,如果顺序既不是 desc 也不是 asc 怎么办。例如,假设我的数组看起来像:

[ {
name: 'u'
},
{
name: 'n'
},
{
name: 'a'
},
{
name: 'n',
}
]

输出应该是这样的:

[ {
name: 'n'
},
{
name: 'n'
},
{
name: 'a'
},
{
name: 'u',
}
]

其中所有以n 开头的名称首先排序,然后才是其余的。我尝试了以下自定义排序功能:

_sortByName(a, b){
if (a.name === 'n'){
return 1;
} else if(b.name === 'n'){
return 1;
} else if(a.name < b.name){
return 1;
} else if(a.name > b.name){
return -1;
}
}

但是对象返回的顺序是错误的。这里出了什么问题?

最佳答案

如果您有任意排序顺序,一种选择是将顺序分配给数组,然后使用 indexOf:

var sortOrder = ['n', 'a', 'u'];
var myArray = [{
name: 'u'
},
{
name: 'n'
},
{
name: 'a'
},
{
name: 'n'
}
];
myArray.sort(function(a, b) {
return sortOrder.indexOf(a.name) - sortOrder.indexOf(b.name);
});

console.log(myArray);

如果任一数组中有很多值,可能值得先创建一个值索引映射,然后使用 sortOrder[a.name]

关于javascript - 对象数组的自定义排序顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38211544/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com