Javascript 如何使用双重条件对js对象进行排序

Javascript 如何使用双重条件对js对象进行排序,javascript,Javascript,我们如何将这些对象排序为上->下,同时排序为左->中->右 {value: "upperRight"} {value: "upperLeft"} {value: "bottomRight"} {value: "bottomCenter"} {value: "bottomLeft"} Array.prototype.sort()允许您指定比较函数。只需设置一些关于如何为字符串打分的基本规则。例如:

我们如何将这些对象排序为上->下,同时排序为左->中->右

{value: "upperRight"}
{value: "upperLeft"}
{value: "bottomRight"}
{value: "bottomCenter"}
{value: "bottomLeft"}
Array.prototype.sort()允许您指定比较函数。只需设置一些关于如何为字符串打分的基本规则。例如:

  • “上”值10分
  • “底部”值0分
  • “左”值2分
  • “中心”值1分
  • “正确”等于0分
在比较函数中,将两个分数相减,并将结果用作返回值

var对象=[
{value:'upperRight'},
{value:'upperLeft'},
{value:'bottomRight'},
{value:'bottomCenter'},
{value:'bottomLeft'}
];
函数scoreString(s){
var得分=0;
如果(s.indexOf('upper')>-1)得分+=20;
如果(s.indexOf('Left')>-1)得分+=2;
否则,如果(s.indexOf('中心')>-1)得分+=1;
返回分数;
}
var sorted=objects.sort(函数(a,b){
返回scoreString(b.value)-scoreString(a.value);
});
控制台日志(已排序)Array.prototype.sort()允许您指定比较函数。只需设置一些关于如何为字符串打分的基本规则。例如:

  • “上”值10分
  • “底部”值0分
  • “左”值2分
  • “中心”值1分
  • “正确”等于0分
在比较函数中,将两个分数相减,并将结果用作返回值

var对象=[
{value:'upperRight'},
{value:'upperLeft'},
{value:'bottomRight'},
{value:'bottomCenter'},
{value:'bottomLeft'}
];
函数scoreString(s){
var得分=0;
如果(s.indexOf('upper')>-1)得分+=20;
如果(s.indexOf('Left')>-1)得分+=2;
否则,如果(s.indexOf('中心')>-1)得分+=1;
返回分数;
}
var sorted=objects.sort(函数(a,b){
返回scoreString(b.value)-scoreString(a.value);
});
控制台日志(已排序)
  • /(?=[A-Z])/
    处拆分每个
    值,以获得其垂直和水平位置。这将创建如下数组:
    [“上”、“右”]
  • 将数组分解为两个单独的变量
  • 创建2个优先级对象。一个用于映射垂直位置的顺序,另一个用于映射水平位置的顺序
  • 首先,根据
    垂直
    优先级对
    进行排序。如果两者具有相同的优先级,
    vertical[a1]-vertical[b1]
    将返回0。因此,
    |
    将根据
    水平部分对它们进行排序
const数组=[{value:“upperRight”},{value:“upperLeft”},{value:“bottomRight”},{value:“bottomLeft”},{value:“bottomLeft”}];
常数垂直={
“上”:1,
“底部”:2
}
常量水平={
"左":一,,
"中心":二,,
“正确”:3
}
array.sort((a,b)=>{
常数[a1,a2]=a.value.split(/(?=[a-Z])/)
常数[b1,b2]=b.value.split(/(?=[A-Z])/)
返回垂直[a1]-垂直[b1]|水平[a2]-水平[b2]
})
console.log(数组)
  • /(?=[A-Z])/
    处拆分每个
    值,以获得其垂直和水平位置。这将创建如下数组:
    [“上”、“右”]
  • 将数组分解为两个单独的变量
  • 创建2个优先级对象。一个用于映射垂直位置的顺序,另一个用于映射水平位置的顺序
  • 首先,根据
    垂直
    优先级对
    进行排序。如果两者具有相同的优先级,
    vertical[a1]-vertical[b1]
    将返回0。因此,
    |
    将根据
    水平部分对它们进行排序
const数组=[{value:“upperRight”},{value:“upperLeft”},{value:“bottomRight”},{value:“bottomLeft”},{value:“bottomLeft”}];
常数垂直={
“上”:1,
“底部”:2
}
常量水平={
"左":一,,
"中心":二,,
“正确”:3
}
array.sort((a,b)=>{
常数[a1,a2]=a.value.split(/(?=[a-Z])/)
常数[b1,b2]=b.value.split(/(?=[A-Z])/)
返回垂直[a1]-垂直[b1]|水平[a2]-水平[b2]
})

console.log(数组)
您尝试了什么?您尝试了什么?