该数组可以具有不同的大小,但最大可以包含以下元素:
DE/FR/IT/EN/RM
一些可能的数组可能是:
DE/FR/IT/EN/RM,
IT/EN/RM,
DE/RM
等
如何按照排序规则制作类似的数组?通过表示如何使该数组始终按照以下顺序进行排序: DE/FR/IT/EN/RM
我尝试了类似的方法,但是由于不是js编码器,我从中无法理解任何事情:
function{
.....
....
...
list.sort(compareList());
...
..
.
}
function compareList() {
var ruleList = new Array();
ruleList.push("DE","FR","IT","EN","RM");
}
例如
具有3个元素的输入数组:RM,DE,EN
排序后输出:DE,EN,RM
或例如
输入最多包含5个元素:FR,DE,EN,RM,IT
输出:DE,FR,IT,EN,RM
答案 0 :(得分:4)
您可以为所需顺序获取一个对象,为未知值获取一个默认值,然后按值的增量进行排序。未知项将排序到数组的末尾。
function compareList() {
var order = { DE: 1, FR: 2, IT: 3, EN: 4, RM: 5, default: Infinity };
return (a, b) => (order[a] || order.default) - (order[b] || order.default);
}
console.log(['RM', 'DE', 'EN'].sort(compareList())); // DE EN RM
console.log(['FR', 'DE', 'EN', 'RM', 'IT'].sort(compareList())); // DE FR IT EN RM
.as-console-wrapper { max-height: 100% !important; top: 0; }
为保留第一个元素,您可以为该值赋予一个很大的负值以进行排序。这只能通过事先知道数组来起作用,因为在以后的排序中,没有关于索引的信息。
const
keepFirst = (array, sort) => {
var order = array.reduce((r, v, i) => (r[v] = i + 1, r), { default: Infinity });
order[array[0]] = -Infinity;
return array.sort((a, b) => (order[a] || order.default) - (order[b] || order.default));
},
order = ['DE', 'FR', 'IT', 'EN', 'RM'];
console.log(keepFirst(['RM', 'DE', 'EN'], order).join(' ')); // RM DE EN
console.log(keepFirst(['FR', 'DE', 'EN', 'RM', 'IT'], order).join(' ')); // FR DE IT EN RM
答案 1 :(得分:1)
var base = ["DE","FR","IT","EN","RM"];
var test = ["DE","IT","FR","EN"];
test.sort((a,b) => base.indexOf(a) - base.indexOf(b));
console.log(test);
您可以使用基本数组的索引作为顺序
var base = ["DE","FR","IT","EN","RM"];
var test = ["DE","IT","FR","EN"];
test.sort((a,b) => base.indexOf(a) - base.indexOf(b));
console.log(test);
答案 2 :(得分:1)
您可以在下面定义类似sortArrayBy()
的函数来实现此目的:
// The sorting function, sorts input array by the by array
function sortArrayBy(input, by) {
var result = [].concat(input)
result.sort(( str0, str1 ) => {
const idx0 = by.indexOf(str0)
const idx1 = by.indexOf(str1)
// If str0 or str1 not found in by array, push these
// to bottom of result
if(idx0 === -1) return 1
if(idx1 === -1) return -1
return idx0 - idx1
})
return result;
}
var data = ['DE','FR','IT','EN','RM']
console.log('DE/FR/IT/EN/RM', sortArrayBy(data, ['DE','FR','IT','EN','RM']))
console.log('IT/EN/RM', sortArrayBy(data, ['IT','EN','RM']))
console.log('DE/RM', sortArrayBy(data, ['DE','RM']))
此sortArrayBy()
方法有效地采用了索引数组(即by
),该索引数组用于指导返回的input
数据(即['DE','FR','IT','EN','RM']
)的排序/排序result
数组,