Javascript:自定义数组排序或基于模式排序
Javascript: custom array sorting or sorting based on a pattern
我有一个关于如何改进一些代码的想法,但这需要使用数组,这些数组必须有一定的排序顺序。
我有一个给定数组: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);
相关文章:
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- 使用promise和mongoose对文档进行排序
- Javascript,访问一个主要对象模块模式中的每个对象
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- Selectize.js:如何对整数值的选项进行排序
- Javascript排序的图像弹出窗口..可以't单独弹出
- 试图在引导模式内动态生成图表,得到offsetWidth错误
- 如何通过引用var Using DataTables来进行分页或排序
- 同位素库错误:未捕获错误无布局模式包装生产线8
- 为什么HTML5拖放的目标是孩子?(可排序列表)
- 在DOM中查找一个模式并替换它's的内容使用jquery
- 如何缩短MongoDB ObjectId并在Mongoose模式中使用它
- AngularJs对所有页面中的所有记录进行排序
- D3.js模式不适用于弧形或圆环图
- 无法将id放在Jquery插件生成的模式中的未排序列表上
- 按“宽 x 高”模式对数组进行排序
- jQuery UI排序无法使用引导模式框
- Javascript:自定义数组排序或基于模式排序
- 如何按自定义模式对字符串数组进行排序
- Bootstrap模式停止工作后,我排序投资组合