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

时间:2015-10-25 06:35:38

标签: javascript arrays sorting pattern-matching

我知道如何改进某些代码,但这需要使用数组,这些数组必须有一定的排序顺序。

我有一个给定的数组:var p = ['skewX', 'translateY', 'scale', 'rotateX'];

我需要在模式中的数组内对这些字符串进行排序:

0 translate1 rotate2 skew3 scale

0 ordered translations1 ordered rotations2 ordered skews3 ordered scales

,其中

indexstring

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

非常感谢。

2 个答案:

答案 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);