这是我的数组的一个例子:
[
1: { name: 'blablabla', difficulty: 'A2' },
2: { name: 'bla', difficulty: 'A1' },
3: { name: 'blablablabla', difficulty: 'B1' },
4: { name: 'blablablabla', difficulty: 'B2' },
5: { name: 'blablablabla', difficulty: 'A2' }
]
my_level: 'B2'
我想对数组进行排序,这样我的难度级别就是第一项,我试着使用sort((,但它只是按"ASC"或"DESC"排序,有人知道怎么做吗?谢谢
您可以通过使用所需的difficulty
检查difficulty
的值来进行排序。
这种方法将所需的值移动到数组的顶部。
const
array = [{ name: 'blablabla', difficulty: 'A2' }, { name: 'bla', difficulty: 'A1' }, { name: 'blablablabla', difficulty: 'B1' }, { name: 'blablablabla', difficulty: 'B2' }, { name: 'blablablabla', difficulty: 'A2' }]
difficulty = 'B2';
array.sort((a, b) => (b.difficulty === difficulty) - (a.difficulty === difficulty));
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
无需sort
it:
arr = [
{ name: 'blablabla', difficulty: 'A2' },
{ name: 'bla', difficulty: 'A1' },
{ name: 'blablablabla', difficulty: 'B1' },
{ name: 'blablablabla', difficulty: 'B2' },
{ name: 'blablablabla', difficulty: 'A2' },
{ name: 'one more', difficulty: 'B2' },
]
my_level = 'B2'
newArr = [
...arr.filter(x => x.difficulty === my_level),
...arr.filter(x => x.difficulty !== my_level),
]
console.log(newArr)
优点:1(更快(我猜(,2(不改变顺序,3(不破坏原来的阵列
以下是一些通用(甚至更快(代码:
// split array into two parts:
// part 0 - where predicate is false
// part 1 - where predicate is true
function partition(ary, predicate) {
let parts = [[], []];
for (let x of arr)
parts[predicate(x) ? 1 : 0].push(x);
return parts;
}
//
newArr = [].concat(...partition(arr, x => x.difficulty !== my_level))
为sort
提供一个比较函数,该函数接受两个参数(比如a
和b
(,并根据下表返回一个值。
a.difficulty === desired |
b.difficulty === desired | 由|
---|---|---|
true | true | 0 |
true | false | <1>|
false | true | <1>|
false | false | 0 |