关于javascript:基于另一个数组的规则进行高级排序

Advanced sort with rules based on another array

本问题已经有最佳答案,请猛点这里访问。

我试过搜索类似于我想要的东西,但我找不到,所以我在这里。

我将发布一个实用的例子,你们可以帮助我。

我正在用Javascript构建这个应用程序,它有一个bjj腰带系统。所以我得到的数据类似于:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
belts = [{
    color: 'white',
    stripes:2,
    date: '0000000000' // timestamp
},{
    color: 'blue',
    stripes:1,
    date: '0000000000' // timestamp
},{
    color: 'purple',
    stripes:0,
    date: '0000000000' // timestamp
},{
    color: 'purple',
    stripes:1,
    date: '0000000000' // timestamp
},{
    color: 'white',
    stripes:3,
    date: '0000000000' // timestamp
},{
    color: 'white',
    stripes:4,
    date: '0000000000' // timestamp
},{
    color: 'brown',
    stripes:1,
    date: '0000000000' // timestamp
},{
    color: 'black',
    stripes:0,
    date: '0000000000' // timestamp
}];

所以现在我想按皮带和条纹分类。

所以我想创建一个规则,按照需要排序的皮带的顺序。

比如:

1
belt_rules = ['white','blue','purple','brown', 'black'];

当我运行排序时,我将把以前所有未排序的数组按上述规则及其升序条的顺序显示出来。

我不知道该怎么做。有人能接受挑战并能帮助我吗?

谢谢


1
2
3
4
5
6
belts.sort(function(a, b) {
    var acolor = belt_rules.indexOf(a.color);
    var bcolor = belt_rules.indexOf(b.color);
    var color_diff = acolor - bcolor;
    return color_diff || a.stripes - b.stripes;
});


1
2
3
4
5
6
7
8
var ordering = {}, // map for efficient lookup of sortIndex
    sortOrder = ['fruit','candy','vegetable'];
for (var i=0; i<belt_rules.length; i++)
    ordering[belt_rules[i]] = i;

belts.sort( function(a, b) {
    return (ordering[a.type] - ordering[b.type]) || a.stripes - b.stripes;
});