慕后森
split每个valueat/(?=[A-Z])/以获得其垂直和水平位置。这将创建一个像这样的数组:["upper", "Right"]解构数组,将它们变成 2 个独立的变量创建 2 个优先对象。一个用于映射垂直位置的顺序,另一个用于映射水平位置的顺序首先sort根据vertical优先级。如果它们具有相同的优先级,vertical[a1] - vertical[b1]将返回 0。因此,||将根据horizontal部分对它们进行排序const array=[{value:"upperRight"},{value:"upperLeft"},{value:"bottomRight"},{value:"bottomCenter"},{value:"bottomLeft"}];const vertical = { "upper": 1, "bottom": 2}const horizontal = { "Left": 1, "Center": 2, "Right": 3}array.sort((a,b) => { const [a1, a2] = a.value.split(/(?=[A-Z])/) const [b1, b2] = b.value.split(/(?=[A-Z])/) return vertical[a1] - vertical[b1] || horizontal[a2] - horizontal[b2]})console.log(array)如果split操作成本较高,您可以添加一个map操作来预先获取所有拆分值并对它们进行排序。