Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中数组对象的排序_Javascript_Arrays_Sorting - Fatal编程技术网

javascript中数组对象的排序

javascript中数组对象的排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,我有一个包含多个对象的数组,如下所示: var test = [ {size: "85A (UK 42A)"}, {size: "80A (UK 40A)"}, {size: "105F (UK 48F)"}, {size: "95E (UK 46E)"}, {size: "92C (UK 44C)"} ] 我想按大小订购,以便订单如下 var test = [ {size: "80A (UK 40A)"} {size: "85A (UK 42A)"}, {size: "92C

我有一个包含多个对象的数组,如下所示:

var test = [
 {size: "85A (UK 42A)"},
 {size: "80A (UK 40A)"},
 {size: "105F (UK 48F)"},
 {size: "95E (UK 46E)"},
 {size: "92C (UK 44C)"}
]
我想按大小订购,以便订单如下

var test = [
 {size: "80A (UK 40A)"}
 {size: "85A (UK 42A)"},
 {size: "92C (UK 44C)"}
 {size: "95E (UK 46E)"},
 {size: "105F (UK 48F)"}
]
我使用过这个,但它会返回下面的数组:

function sorting(json_object, key_to_sort_by) {
 function sortByKey(a, b) {
   var x = a[key_to_sort_by];
   var y = b[key_to_sort_by];
   return ((x < y) ? -1 : ((x > y) ? 1 : 0));
 }

 json_object.sort(sortByKey);
}


var test = [
 {size: "105F (UK 48F)"},
 {size: "80A (UK 40A)"}
 {size: "85A (UK 42A)"},
 {size: "92C (UK 44C)"}
 {size: "95E (UK 46E)"}
]
函数排序(json对象,键到排序依据){
功能sortByKey(a,b){
var x=a[输入到排序依据];
变量y=b[输入到排序依据];
回报率((xy)?1:0);
}
json_object.sort(sortByKey);
}
var测试=[
{大小:“105F(英国48F)”},
{大小:“80A(英国40A)”}
{大小:“85A(英国42A)”},
{大小:“92C(英国44C)”}
{大小:“95E(英国46E)”}
]

如果您也希望使用数字后面的字符进行排序,也可以使用正则表达式来获取此值

var测试=[{size:“105F(UK48F)”},{size:“80A(UK40A)”},{size:“85A(UK2A)”},{size:“92C(UK44C)”},{size:“80B(UK40B)”},{size:“80C(UK40C)”},{size:“95E(UK46E)”};
测试.排序(函数(a,b){
函数getV(s){返回s.match(/^(\d+)(\w+/);}
var aa=getV(a.尺寸),
bb=getV(b.尺寸);
返回aa[1]-bb[1]| | aa[2].localeCompare(bb[2]);
});
控制台日志(测试)

。作为控制台包装{max height:100%!important;top:0;}
默认情况下,排序将按Unicode代码点对字符串进行排序。你需要分离出一些数字来进行排序,然后将其转换成一个数字,并将其用于比较。像这样的东西应该有用

let大小=[
{大小:“85A(英国42A)”},
{大小:“80A(英国40A)”},
{大小:“105F(英国48F)”},
{大小:“95E(英国46E)”},
{大小:“92C(英国44C)”},
{大小:“80B(英国40B)”},
];
大小。排序(功能(a、b){
var sizeA=a.size.split(“”)[0];
var sizeB=b.大小分割(“”)[0];
设aInt=parseInt(sizeA);
设bInt=parseInt(sizeB);
//如果相同的数字,我们可以比较字符串
//因为数字字符将相等。
如果(aInt==bInt){
返回sizeA.localeCompare(sizeB);
}
//如果不相等,比较数字。
返回aInt-bInt;
});
//对于代码片段。
控制台日志(大小)
var测试=[
{大小:“85A(英国42A)”},
{大小:“80A(英国40A)”},
{大小:“105F(英国48F)”},
{大小:“95E(英国46E)”},
{大小:“92C(英国44C)”}
]
var sorted=test.sort(函数(a,b){
返回parseInt(a['size'].split(“”)[0])-parseInt(b['size'].split('(')[0]);
})

console.log(已排序)
该函数不是为每对元素调用的吗?这不是意味着在每次迭代中都要重新创建
getN
?是的,您可以使用带有映射的排序,其中映射包含用于排序的值,或者只对每个对象使用一个新属性,或者根据数组的大小对值使用哈希表对于排序。对于一个小的集合,优化是不必要的。假设这实际上可能比它最初出现的更复杂,如果你想随后按字母排序,如果数字相同?是的,如果数字相同,我也会按字母排序。