首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用另一个数组作为模板对数组数据进行排序?

如何使用另一个数组作为模板对数组数据进行排序?
EN

Stack Overflow用户
提问于 2016-06-17 14:26:33
回答 4查看 373关注 0票数 0

我试图根据“主”数组对动态生成的JavaScript数组进行排序。此主数组将用作如何对动态生成的数组排序的模板。但是,主数组将来可能会添加新的项,但是这些项将手动添加。

需要排序的数组是:

代码语言:javascript
运行
复制
var arrayToSort = ['ABCD','ABCD 123 Team','IMT_User_MNOP'];

主数组是:

代码语言:javascript
运行
复制
var roleDef = ['IMT_User_MNOP','IMT_User_User','ABCD','ABCD 123 Team','ABCD Plans'];

我在这里浏览了几乎所有的解决方案,其中没有一个解决方案是根据不匹配的项目数和索引值===索引值对数组进行排序的。其他解决方案处理密钥,或根据字母(或基于数字的字母)对数字进行排序等。

我很感激有人能提供的任何帮助,即使它只是指给我一个正确的方向,这样我就可以解决这个问题。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-06-17 14:36:06

代码语言:javascript
运行
复制
var arrayToSort = ['ABCD','ABCD 123 Team','IMT_User_MNOP'];
var roleDef = ['IMT_User_MNOP','IMT_User_User','ABCD','ABCD 123 Team','ABCD Plans'];


var newArr = arrayToSort.map(function(item){
  var idx = roleDef.indexOf(item);
  
  return {
    val:item,
    roleDefIndex:idx
  };
});
var result = newArr.sort(function(a, b) {
  return a.roleDefIndex - b.roleDefIndex;
}).map(function(item){
  return item.val;
});
console.log(result);

其他版本

代码语言:javascript
运行
复制
var arrayToSort = ['ABCD','ABCD 123 Team','IMT_User_MNOP'];
var roleDef = ['IMT_User_MNOP','IMT_User_User','ABCD','ABCD 123 Team','ABCD Plans'];

var IndexWithinRole = {};
 arrayToSort.forEach(function(item){
  IndexWithinRole[item] = roleDef.indexOf(item);
});
arrayToSort.sort(function(a, b) {
  return IndexWithinRole[a] - IndexWithinRole[b];
});
console.log(arrayToSort);

票数 1
EN

Stack Overflow用户

发布于 2016-06-17 14:33:34

我建议对缺省值wheather的所需排序顺序使用哈希表,未定义的值应该开始或结束。

{ "IMT_User_MNOP":1,"IMT_User_User":2,"ABCD":3,"ABCD 123团队“:4,"ABCD计划”:5}

代码语言:javascript
运行
复制
var arrayToSort = ['ABCD', 'ABCD 123 Team', 'IMT_User_MNOP'],
    roleDef = ['IMT_User_MNOP', 'IMT_User_User', 'ABCD', 'ABCD 123 Team', 'ABCD Plans'],
    roleObj = Object.create(null);

roleDef.forEach(function (a, i) { roleObj[a] = i + 1; });

arrayToSort.sort(function (a, b) {
    return (roleObj[a] || 0) - (roleObj[b] || 0);
});

console.log(arrayToSort);

票数 2
EN

Stack Overflow用户

发布于 2016-06-17 15:37:03

我只是这样做了,但没有时间去检查它是否愚蠢

代码语言:javascript
运行
复制
var arrayToSort = ['ABCD','ABCD 123 Team','IMT_User_MNOP'],
        roleDef = ['IMT_User_MNOP','IMT_User_User','ABCD','ABCD 123 Team','ABCD Plans'];
arrayToSort.sort((a,b) => roleDef.indexOf(a) - roleDef.indexOf(b));
console.log(arrayToSort);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37884098

复制
相关文章

相似问题

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