Javascript:自定义数组排序或基于模式排序

Javascript: custom array sorting or sorting based on a pattern

本文关键字:模式 排序 于模式 自定义 数组排序 Javascript      更新时间:2023-09-26

我有一个关于如何改进一些代码的想法,但这需要使用数组,这些数组必须有一定的排序顺序。

我有一个给定数组: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

,

indexstring

问题:是否有可能根据这种模式对这些数组进行排序?

回调函数不会自己排序。它只需要比较传递给它的任意两个项。所以你必须编写逻辑来翻译以'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);