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

我有一个场景,我正在对对象数组进行排序,并且需要根据 prop 的值将某些对象准确地维护在它们所在的位置。


所以目前我有,简短地说:


const sorted = accounts.sort((a, b) => {

    if (a.locked) return;

    if (b.locked) return;

    return b.price - a.price;

}

显然,这并没有按预期工作 - 虽然它忽略了特定locked情况,但它也忽略了排序比较,因此如果a被锁定但b需要移动,b也会被忽略而不是正确移动。


我想到的唯一其他选择是标记哪些是locked,然后在排序后将它们移回它们应该在的位置 - 不认为这是理想的,我正在寻找一种更有效的方法来将对象保留locked在其精确位置放置在数组中,同时其他对象在其周围移动,如果可能的话?


尚方宝剑之说
浏览 103回答 1
1回答

凤凰求蛊

我会过滤以收集所有未锁定的项目,然后对该数组进行排序,然后映射原始数组以将未锁定的原始项目替换为已排序的未锁定项目: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++]);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript