Javascript 如何根据第一个值对数组进行排序?

Javascript 如何根据第一个值对数组进行排序?,javascript,arrays,sorting,Javascript,Arrays,Sorting,我有一个包含字符串和数组的数组。每个字符串都与它旁边的数组相关联。例如,字符串789与数组['111A'、'222B'、'333C']相关联。我想在字符串上排序,同时将数组绑定到字符串上 我尝试过使用sort()方法,当我的数组中只有字符串时,该方法会在加入时进行排序,但当我添加数组时,它会返回默认排序 let myArry = [ '789', ['111A','222B','333C'], '456', ['444E','555F','666G'], '123',

我有一个包含字符串和数组的数组。每个字符串都与它旁边的数组相关联。例如,字符串789与数组['111A'、'222B'、'333C']相关联。我想在字符串上排序,同时将数组绑定到字符串上

我尝试过使用
sort()
方法,当我的数组中只有字符串时,该方法会在加入时进行排序,但当我添加数组时,它会返回默认排序

let myArry = [
  '789', 
  ['111A','222B','333C'], 
  '456',
  ['444E','555F','666G'], 
  '123',
  ['777H','888I','999J']
]

myArray.sort(function(a,b){
return a - b
})
最后,我希望数据是这样的

['123', ['777H', '888I','999J'],
'456', ['444E', '555F', '666G'],
'789', ['111A', '222B', '333C']]

您可以定义排序函数,在该函数中可以更改项目类型-例如toString()

让myArray=[
'789', 
['111','222','333'], 
'456',
['444','555','666'], 
'123',
['777','888','999']
];
myArray.sort((左、右)=>{
if(left.toString()right.toString()){
返回1;
}否则{
返回0;
}
});

您可以创建一个数组,将找到的每个字符串的2个元素放在一起,然后按字符串排序,并应用concat获得一个类似于首字母的数组,但按字符串排序:

让myArray=[
'789',
['111', '222', '333'],
'456',
['444', '555', '666'],
'123',
['777', '888', '999'],
];
常量orderMyArrayByStrings=(myArray)=>{
常量MyArrayWithArray=myArray
.reduce((acc、el、索引、数组)=>{
if(!(el instanceof数组)){
返回acc.push([el,数组[index+1]])和&acc;
}否则{
返回acc;
}
}, [])
常量myArraySortedByStrings=myArrayWithArrays.sort((a,b)=>{
返回a[0]-b[0];
})
返回[].concat.apply([],MyArraySortedByString)
}

log(orderMyArrayByStrings(myArray))
您可以按对分组,对它们进行排序,然后返回一个平面数组

var数组=['789'、['111'、['222'、'333']、'456'、['444'、'555'、'666']、'123'、['777'、'888'、'999'],
结果=数组
.减少((r,v,i)=>{
如果(i%2)r[r.length-1]。推(v);
否则r.push([v]);
返回r;
}, [])
.sort(([a],[b])=>a-b)
.减少((r,a)=>r.concat(a),[]);
控制台日志(结果)

作为控制台包装{max height:100%!important;top:0;}
您想对数组做什么?请发布您在问题中寻找的最终输出。
.sort()
方法接受一个回调函数,该函数可以根据您的应用程序执行任何您需要的操作,以正确比较值。那么什么是不起作用的代码?请添加所需的结果。感谢Nina,很抱歉,我的数组中的数组看起来更像这样,
['801A56'、'456T78'、'458R454']
。再次为这个糟糕的例子感到抱歉。对于这个问题,您可以添加另一个问题(尝试)。
let myArray = [
    '789', 
    ['111','222','333'], 
    '456',
    ['444','555','666'], 
    '123',
    ['777','888','999']
];
myArray.sort((left,right)=>{
    if(left.toString() < right.toString()) {
        return -1;
    } else if(left.toString() > right.toString()) {
        return 1;
    } else {
        return 0;
    }
});