我如何在Javascript中像索引书一样订购?

时间:2018-05-15 23:04:37

标签: javascript vue.js

我正在使用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

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)

目的是首先检查数字的左侧部分,然后检查中间部分,最后检查右侧部分。

  • 如果a1&gt; b1,然后返回sth&gt; = 1
  • 如果a1&lt; b1,返回sth&lt; = -1
  • 但是如果a1 = a2,那么检查a2和b2(再次应用同样的过程,直到a3和b3)

&#13;
&#13;
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;
&#13;
&#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);