我试图搜索类似于我想要的东西,但我没有找到它,所以我在这里。
我将发布一个实际的例子,所以你们可以帮助我。
我正在使用带有BJJ腰带系统的Javascript构建此应用程序。所以我的数据类似于:
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
}];
所以现在我想用腰带和条纹对它进行排序。
所以我想创建一个规则,其中包含需要排序的皮带顺序。
类似的东西:
belt_rules = ['white','blue','purple','brown', 'black'];
当我运行排序时,我将拥有之前未排序的数组,按照上述规则及其上升条纹的顺序显示。
我不清楚我将如何做到这一点。任何接受挑战的人都可以帮助我吗?
由于
答案 0 :(得分:3)
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 :(得分:0)
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;
});