我有一个关于如何改进一些代码的想法,但这需要使用数组,这些数组必须有一定的排序顺序。
我有一个给定数组: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
问题:是否有可能根据这种模式对这些数组进行排序?
回调函数不会自己排序。它只需要比较传递给它的任意两个项。所以你必须编写逻辑来翻译以'translate'开头的字符串在以'rotate'开头的字符串之前。
// 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);
排序函数可以基于您想要排序的单词,只要它们具有唯一的字符序列:
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);