gpt4 book ai didi

javascript - 如果找到,按定义的值排序

转载 作者:行者123 更新时间:2023-12-01 16:16:41 25 4
gpt4 key购买 nike

仅使用原生 ES2015(即没有库)我需要按一组定义的值(想想 T 恤尺码)对对象列表进行排序,并优先考虑与其中一个定义值匹配的对象。

示例数据:

const shirt_stock= [
{size: "M"},
{size: "L"},
{size: "M"},
{size: "XM"},
{size: "XL"} ]

定义的排序顺序:

const sort_order = ["S", "M", "L", "XL"]

排序代码(使用indexOf()排序不需要注释,伪代码):

shirt_stock.sort((a, b) => {
return sort_order.indexOf(b.size) - sort_order.indexOf(a.size)
})

产量结果:

> 0: "XM"
> 1: "M"
> 2: "M"
> 3: "L"
> 4: "XL"

问题是第一个结果“XM”——我希望它在最后。换句话说,我想首先按照 sort_order 中定义的顺序对已知尺码的衬衫进行排序,然后是其他所有内容 - 如果“未知尺码衬衫”也被排序,那么它们是按大小分组。

期望的结果:

> 0: "M"
> 1: "M"
> 2: "L"
> 3: "XL"
> 4: "XM"

我很困惑,什么是干净(例如,不将 shirt_stock 拆分为两个数组、排序和梳理)并且相当有效的方法来实现这一目标?

最佳答案

indexOf 为没有找到的元素返回-1,然后将其放在最前面。您需要为这些元素使用一个高于所有其他索引的值。这是实现该目标的快速方法:

shirt_stock.sort((a, b) => {
return (sort_order.indexOf(a.size)+1 || sort_order.length+1) - (sort_order.indexOf(b.size)+1 || sort_order.length+1)
})

因为您已经计划不在回调中直接使用 indexOf,您可能会找到一种更优雅的方式来合并这些默认值:-)

关于javascript - 如果找到,按定义的值排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63442417/

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