我想排序一个动态javascript数组,它每次都从数据库中获取。条件是,我希望根据标准预定义数组中以特定顺序存储的值对其进行排序。
假设我的Dyanamic数组是这样的:
var dbArray = ['Apple','Banana','Mango','Apple','Mango','Mango','Apple'];
假设我必须对上面的数组进行排序的标准数组如下
var stdArray = ['Mango','Apple','Banana','Grapes'];
因此,在对dbArray进行排序之后,我的结果数组应该如下所示:
var resultArray = ['Mango','Mango','Mango','Apple','Apple','Apple','Banana'];
因为它是排序的,保持stdArray作为排序标准,可以按任何顺序排序,而不管字母顺序或任何其他可用的标准排序顺序,纯粹是自定义排序。
发布于 2015-06-11 17:50:34
这个解决方案很慢,但应该有效。
dbArray.sort(function(a,b) {
return stdArray.indexOf(a) - stdArray.indexOf(b);
});
如果您关心性能,可以使用一个映射来跟踪每个项的索引,以避免扫描数组中的每个比较。
var indexMap ={};
stdArray.forEach(function(str) {
indexMap[str]=stdArray.indexOf(str);
});
dbArray.sort(function(a,b) {
return indexMap[a] - indexMap[b];
});
发布于 2015-06-11 17:48:55
您可以使用典型的排序,并将a
索引与引用数组中的b
索引进行比较。
dbArray.sort(function (a, b) {
return stdArray.indexOf(a) - stdArray.indexOf(b);
});
发布于 2015-06-11 18:02:45
var dbArray = ['Apple','Banana','Mango','Apple','Mango','Mango','Apple'];
var stdArray = ['Mango', 'Apple', 'Banana', 'Grapes'];
var sortArray = [];
stdArray.forEach(function (a) {
while (dbArray.indexOf(a) !== -1) {
sortArray.push(dbArray.splice(dbArray.indexOf(a), 1));
}
});
sortArray.push(dbArray);
console.log(sortArray); // Mango,Mango,Mango,Apple,Apple,Apple,Banana,
https://stackoverflow.com/questions/30787781
复制相似问题