我知道如何改进某些代码,但这需要使用数组,这些数组必须有一定的排序顺序。
我有一个给定的数组:var p = ['skewX', 'translateY', 'scale', 'rotateX'];
。
我需要在模式中的数组内对这些字符串进行排序:
0 translate
,1 rotate
,2 skew
,3 scale
或
0 ordered translations
,1 ordered rotations
,2 ordered skews
,3 ordered scales
,其中
index
和string
问题:是否可以根据这种模式对这些数组进行排序?
非常感谢。
答案 0 :(得分:1)
回调函数不会自行排序。它只需要比较传递给它的任何两个项目。所以你必须编写一个逻辑来翻译以' translate'开头的字符串。来自'旋转'之前的字符串。
// Very simple, rudimentary function to translate a type to number. Improve at will.
function typeIndex(x) {
if (x.indexOf('translate') > -1) return 0;
if (x.indexOf('rotate') > -1) return 1;
if (x.indexOf('skew') > -1) return 2;
if (x.indexOf('scale') > -1) return 3;
return 1000; // Unknown
}
var p = ['skewX', 'rotateY', 'rotateZ', 'translateY', 'scale', 'rotateX', 'ordered skewing'];
// Sort array using callback;
p.sort(function(a, b){
// First compare the difference based on type.
var result = typeIndex(a) - typeIndex(b);
// If the difference is 0, they are of the same type. Compare the whole string.
if (result == 0)
result = a.localeCompare(b);
return result;
});
console.log(p);

答案 1 :(得分:1)
sort函数可以基于您要按顺序排序的单词,前提是它们具有唯一的字符序列:
var p = ['skewX', 'translateY', 'scale', 'rotateX'];
p.sort(function(a, b) {
var order = 'transrotaskewscal';
return order.indexOf(a.slice(0,4)) - order.indexOf(b.slice(0,4));
});
document.write(p);