忽略某些对象值的Javascript排序,将它们保留在原来的位置

忽略某些对象值的Javascript排序,将它们保留在原来的位置,javascript,sorting,Javascript,Sorting,我有一个场景,在这个场景中,我对一组对象进行排序,并且需要根据道具的值精确地维护某些对象 所以现在我有,简短的: const sorted = accounts.sort((a, b) => { if (a.locked) return; if (b.locked) return; return b.price - a.price; } 显然,这并没有像预期的那样起作用-虽然它忽略了特定的locked情况,但它也忽略了排序比较,因此如果a被锁定,但b需要移动,b也

我有一个场景,在这个场景中,我对一组对象进行排序,并且需要根据道具的值精确地维护某些对象

所以现在我有,简短的:

const sorted = accounts.sort((a, b) => {
    if (a.locked) return;
    if (b.locked) return;
    return b.price - a.price;
}
显然,这并没有像预期的那样起作用-虽然它忽略了特定的
locked
情况,但它也忽略了排序比较,因此如果
a
被锁定,但
b
需要移动,
b
也被忽略,而不是正确移动

我唯一想到的另一个选择是标记哪些
已锁定
,然后在排序后将它们移回应该的位置-不要认为这很理想,我正在寻找一种更有效的方法,在其他对象围绕它移动时,将
已锁定
对象保留在其在数组中的确切位置,如果可能的话


谢谢

我会筛选收集所有未锁定的项目,然后对该数组进行排序,然后映射原始数组以将未锁定的原始项目替换为已排序的未锁定项目:

const unlocked = accounts.filter(a => !a.locked);
unlocked.sort((a, b) => b.price - a.price);
let i = 0;
const sorted = accounts.map(item => item.locked ? item : unlocked[i++]);