首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用标准数组值对数组进行排序或排列

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

Stack Overflow用户
提问于 2015-06-11 17:42:11
回答 4查看 55关注 0票数 2

我想排序一个动态javascript数组,它每次都从数据库中获取。条件是,我希望根据标准预定义数组中以特定顺序存储的值对其进行排序。

假设我的Dyanamic数组是这样的:

代码语言:javascript
运行
复制
var dbArray = ['Apple','Banana','Mango','Apple','Mango','Mango','Apple'];

假设我必须对上面的数组进行排序的标准数组如下

代码语言:javascript
运行
复制
var stdArray = ['Mango','Apple','Banana','Grapes'];

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

代码语言:javascript
运行
复制
var resultArray = ['Mango','Mango','Mango','Apple','Apple','Apple','Banana'];

因为它是排序的,保持stdArray作为排序标准,可以按任何顺序排序,而不管字母顺序或任何其他可用的标准排序顺序,纯粹是自定义排序。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-06-11 17:50:34

这个解决方案很慢,但应该有效。

代码语言:javascript
运行
复制
dbArray.sort(function(a,b) { 
    return stdArray.indexOf(a) - stdArray.indexOf(b);
});

如果您关心性能,可以使用一个映射来跟踪每个项的索引,以避免扫描数组中的每个比较。

代码语言:javascript
运行
复制
var indexMap ={};
stdArray.forEach(function(str) {
    indexMap[str]=stdArray.indexOf(str);
});

dbArray.sort(function(a,b) { 
    return indexMap[a] - indexMap[b];
});
票数 6
EN

Stack Overflow用户

发布于 2015-06-11 17:48:55

您可以使用典型的排序,并将a索引与引用数组中的b索引进行比较。

代码语言:javascript
运行
复制
dbArray.sort(function (a, b) {
    return stdArray.indexOf(a) - stdArray.indexOf(b);
});
票数 4
EN

Stack Overflow用户

发布于 2015-06-11 18:02:45

代码语言:javascript
运行
复制
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,
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30787781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档