Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.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,我试着搜索一些类似于我想要的东西,但我没有找到,所以我来了 我将发布一个实际的例子,你们可以帮助我 我正在用Javascript构建这个应用程序,它有一个BJJ皮带系统。所以我得到的数据类似于: belts = [{ color: 'white', stripes:2, date: '0000000000' // timestamp },{ color: 'blue', stripes:1, date: '0000000000' // timest

我试着搜索一些类似于我想要的东西,但我没有找到,所以我来了

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

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

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'];
当我运行排序时,我将让我以前未排序的数组按照上述规则及其升序条纹的顺序显示

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

感谢

var ordering={},//映射有效地查找sortIndex
排序器=[‘水果’、‘糖果’、‘蔬菜’];

对于(var i=0;iThanks Barmar,这正是我想要的!!!如果数组较大,则重复问题中可接受的答案会更好。
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;
});
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;
});