Javascript-使用可变长度数组进行排序

Javascript-使用可变长度数组进行排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,假设我有一个按多个分数排序的选项数组,这些分数是一个可变长度的数组 [ #[标签、分数] [“标签6”,[1] [“标签5”,[1,5] [“标签2”,[0,1,3,5], [“标签1”,[0,1,2] [“Label3”,[0,1,4], [“标签4”,[1,4] ] 我想通过逐个计算数组元素来对该列表进行排序。即,我将首先按分数[0]排序(升序),然后按分数[I+1]排序(如果存在),等等。当分数[I]不存在时,应将其视为一个无限值(显示在底部) 这可能会对以前的数据产生以下输出: 列表=

假设我有一个按多个分数排序的选项数组,这些分数是一个可变长度的数组

[
#[标签、分数]
[“标签6”,[1]
[“标签5”,[1,5]
[“标签2”,[0,1,3,5],
[“标签1”,[0,1,2]
[“Label3”,[0,1,4],
[“标签4”,[1,4]
]
我想通过逐个计算数组元素来对该列表进行排序。即,我将首先按
分数[0]
排序(升序),然后按
分数[I+1]
排序(如果存在),等等。当
分数[I]
不存在时,应将其视为一个无限值(显示在底部)

这可能会对以前的数据产生以下输出:

列表=[
#[标签、分数]
[“标签1”,[0,1,2]
[“标签2”,[0,1,3,5],
[“Label3”,[0,1,4],
[“标签4”,[1,4]
[“标签5”,[1,5]
[“标签6”,[1]
]

如何编写此函数?是否有一个本机/ES6(或lodash/下划线)
sortBy()
函数,就像我们在其他语言中使用的那样?(例如,在Ruby中,您只需
list.sort\u by(&:last)
即可获得此效果)。还是需要手动实现?

您可以获取数组,并按相同的索引值进行排序

开始时,取两个数组的最小长度作为迭代值的长度,以防止取
未定义的

如果同一索引的两个值的增量不为零,则返回增量,否则继续下一个索引

如果访问所有索引时未返回前一个值,则在两个数组的最小长度之前,同一索引中的所有值都相等。在这种情况下,将按切换顺序返回两个数组长度的增量,因为较长的数组应排在第一位

var数组=[“Label6”、[1,5]、[“Label2”、[0,1,3,5]、[“Label1”、[0,1,2]、[“Label3”、[0,1,4]、[“Label5”、[1,5,2]、[“Label4”、[1,4];
array.sort(([,a],,b])=>{
瓦尔三角洲,
指数=0,
长度=数学最小值(a.长度,b.长度);
while(索引<长度){
delta=a[index]-b[index];
if(delta)返回delta;
索引++;
}
返回b.length-a.length;
});
console.log(数组);

.as console wrapper{max height:100%!important;top:0;}
有一个
array.sort()
函数,它接受排序算法并根据该算法对数组进行排序。只需对2个参数执行排序即可

在你的情况下,我会这样做:

list.sort( list1, list2 => {
  let i = 0, iterations = min(list1.length, list2.length);
  for( i = 0; i<iterations; i++ ){
    if( list1[i] < list2[i] ) return -1;
    if( list1[i] > list2[i] ) return 1;
  }
  if( list1.length === list2.length ) return 0;
  if( i === list1.length ) return -1;
  if( i === list2.length ) return 1;
}
list.sort(列表1,列表2=>{
设i=0,迭代次数=min(list1.length,list2.length);
对于(i=0;i列表2[i])返回1;
}
if(list1.length==list2.length)返回0;
if(i==list1.length)返回-1;
如果(i==list2.length)返回1;
}

看看这个函数。@Kobe我在
.sort
函数的文档中看不到我试图实现的任何示例。我遇到的所有解决方案都涉及
排序((a,b)=>如果a[0]-b[0],a[1]-b[1],…
但是当一个“排序条件项”出现时会发生什么可以是可变长度的吗?然后你会相应地编写回调函数。我现在开始回答,但似乎很难。我可以将分数转换为字符串,然后将它们连接起来,然后只执行字母排序…但是如果我的分数高于9,我就死了,可能就是这样。所以你希望
0,1,2
出现在
0,1,2,3之后的ar?非常感谢!:D