使用标准数组值对数组进行排序或排列

Pra*_*h M 2 javascript arrays sorting algorithm

我想对每次从数据库中提取的动态javascript数组进行排序.条件是我想根据标准预定义数组中以特定顺序存储的值对其进行排序.

让我说我的Dyanamic数组就像:

var dbArray = ['Apple','Banana','Mango','Apple','Mango','Mango','Apple'];
Run Code Online (Sandbox Code Playgroud)

并假设我必须对上面的数组进行排序的标准数组就像

var stdArray = ['Mango','Apple','Banana','Grapes'];
Run Code Online (Sandbox Code Playgroud)

因此在对dbArray进行排序后,我的结果数组应如下所示:

var resultArray = ['Mango','Mango','Mango','Apple','Apple','Apple','Banana'];
Run Code Online (Sandbox Code Playgroud)

因为它被排序,保持stdArray作为排序标准,无论按字母顺序排列还是任何其他可用的标准排序顺序,它都可以是任何顺序,纯自定义排序.

Jua*_*des 6

这个解决方案很慢,但应该可行

dbArray.sort(function(a,b) { 
    return stdArray.indexOf(a) - stdArray.indexOf(b);
});
Run Code Online (Sandbox Code Playgroud)

如果您担心性能,可以使用地图跟踪每个项目的索引,以避免为每次比较扫描数组.

var indexMap ={};
stdArray.forEach(function(str) {
    indexMap[str]=stdArray.indexOf(str);
});

dbArray.sort(function(a,b) { 
    return indexMap[a] - indexMap[b];
});
Run Code Online (Sandbox Code Playgroud)