按javascript数组中第一个项目排序



这是我的数组的一个例子:

[
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; }

无需sortit:

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提供一个比较函数,该函数接受两个参数(比如ab(,并根据下表返回一个值。

compare返回的值<1><1>
a.difficulty === desired b.difficulty === desired
true true 0
true false
false true
false false 0

最新更新