我试图根据“主”数组对动态生成的JavaScript数组进行排序。此主数组将用作如何对动态生成的数组排序的模板。但是,主数组将来可能会添加新的项,但是这些项将手动添加。
需要排序的数组是:
var arrayToSort = ['ABCD','ABCD 123 Team','IMT_User_MNOP'];
主数组是:
var roleDef = ['IMT_User_MNOP','IMT_User_User','ABCD','ABCD 123 Team','ABCD Plans'];
我在这里浏览了几乎所有的解决方案,其中没有一个解决方案是根据不匹配的项目数和索引值===
索引值对数组进行排序的。其他解决方案处理密钥,或根据字母(或基于数字的字母)对数字进行排序等。
我很感激有人能提供的任何帮助,即使它只是指给我一个正确的方向,这样我就可以解决这个问题。
发布于 2016-06-17 14:36:06
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);
其他版本
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);
发布于 2016-06-17 14:33:34
我建议对缺省值wheather的所需排序顺序使用哈希表,未定义的值应该开始或结束。
{ "IMT_User_MNOP":1,"IMT_User_User":2,"ABCD":3,"ABCD 123团队“:4,"ABCD计划”:5}
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);
发布于 2016-06-17 15:37:03
我只是这样做了,但没有时间去检查它是否愚蠢
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);
https://stackoverflow.com/questions/37884098
复制相似问题