我正在使用VueJS,我有一个像这样的对象数组:
`const myarray = [
{'secction': '6.2.3','title': 'a'},
{'secction': '6.2.2','title': 'b'},
{'secction': '11.3.1','title': 'bn'},
{'secction': '10.5.1','title': 'z'},
{'secction': '10.4.1', title: 'da'}
]`
我想订购:
6.2.3
6.2.2
10.4.1
10.5.1
11.3.1
但我接受了这个功能:
myarray.sort( (a ,b) => {
if (a.Control_num < b.Control_num) return -1
if (a.Control_num > b.Control_num) return 1
return 0
})
,结果如下:
10.4.1
10.5.1
10.6.2
11.2.2
11.3.1
6.2.2
6.2.3
答案 0 :(得分:1)
一种简单的方法是拆分各个部分并将其分成可以排序的数字..
例如。 6.2.3 - &gt; 60203 10.5.1 - &gt; 105010等。
那么排序只是从另一个中减去一个简单的问题..
...示例
const myarray = [
{'secction': '6.2.3','title': 'a'},
{'secction': '6.2.2','title': 'b'},
{'secction': '11.3.1','title': 'bn'},
{'secction': '10.5.1','title': 'z'},
{'secction': '10.4.1', title: 'da'}
];
function num(a) {
var b = a.secction.split(".");
return b[0] * 10000 + b[1] * 100 + b[2];
}
myarray.sort((a,b) => {
return num(a) - num(b);
});
myarray.forEach((a) => console.log(a.secction + ' -> ' + a.title));
答案 1 :(得分:0)
目的是首先检查数字的左侧部分,然后检查中间部分,最后检查右侧部分。
const myarray = [
{'secction': '6.2.3','title': 'a'},
{'secction': '6.2.2','title': 'b'},
{'secction': '11.3.1','title': 'bn'},
{'secction': '10.5.1','title': 'z'},
{'secction': '10.4.1', title: 'da'}
]
function bySecction(a, b) {
const [a1, a2, a3] = a.secction.split('.')
const [b1, b2, b3] = b.secction.split('.')
return (a1 - b1) && (a2 - b2) && (a3 - b3)
}
myarray
.sort(bySecction)
.reverse()
console.log(myarray)
&#13;
答案 2 :(得分:-1)
你可以这样排序
const myarray = [
{'secction': '6.2.3','title': 'a'},
{'secction': '6.2.2','title': 'b'},
{'secction': '11.3.1','title': 'bn'},
{'secction': '10.5.1','title': 'z'},
{'secction': '10.4.1', title: 'da'}
];
const result = myarray.sort((a, b) => {
const n1 = a.secction.split('.').reverse().map((n, index) => n * (10^index)).reduce((i, j) => i + j, 0);
const n2 = b.secction.split('.').reverse().map((n, index) => n * (10^index)).reduce((i, j) => i + j, 0);
return n1 - n2;
});
console.log(result);