elc*_*nrs 5 javascript sorting
我有一个像这样大小的数组:
var arr = [
'small',
'small',
'small',
'small',
...
'medium',
'medium',
'medium',
'medium',
...
'big',
'big',
...
];
Run Code Online (Sandbox Code Playgroud)
我需要根据这个顺序重新组织这个数组:
var order = ['small', 'small', 'medium', 'medium', 'big'];
Run Code Online (Sandbox Code Playgroud)
所以结果最终会是这样的:
var arr = [
'small',
'small',
'medium',
'medium',
'big',
'small',
'small',
'medium',
'medium',
'big'
...
];
Run Code Online (Sandbox Code Playgroud)
我知道其他类似的问题,但到目前为止我找不到任何东西.我不确定如何处理这个问题.我在想sort应该做什么,但我要测试什么?看起来很简单,但我卡住了,不知道从哪里开始.任何提示?
只需为您的排序方法定义一个记分员。这是你的代码。尝试一下
var init_arr = ['small', 'big', 'big', 'medium'];
var scorer = {
small: 0,
medium: 1,
big: 2
}
// You can use the same array too. I am creating new one.
var final_arr = init_arr.sort(function(a,b) {
return scorer[a]-scorer[b];
});
alert(final_arr); //small, medium, big, big
Run Code Online (Sandbox Code Playgroud)
好吧,我最终得到了这个有效的解决方案:
function orderBy(arr, order) {
var result = [],
i = 0, len = arr.length,
index;
while (result.length < len) {
index = arr.indexOf(order[i]);
result.push(arr[index]);
arr.splice(index, 1);
i = i >= order.length-1 ? 0 : ++i;
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
它修改了原始数组,但没关系。
演示: http: //jsbin.com/umizat/1/edit