我目前有这个按字母顺序排序数组的功能。
function compare(a,b) {
if (a.subtitle < b.subtitle)
return -1;
if (a.subtitle > b.subtitle)
return 1;
return 0;
}
我需要一个类似的函数,用另一个数组对数组进行排序。我自己试着写它,但是我无法理解它,所以我什么都没有。
示例:
我需要对array1进行排序,具体取决于该项在array2中的位置。
Array1 = ['quick','fox','the','brown'];
Array2 = ['the','quick','brown','fox'];
我可能没有看到一个简单的答案。
修改
此外,array1中不在数组2中的任何项目都可以按照特定顺序添加到最后,或者按字母顺序添加到任何更容易的项目中。
答案 0 :(得分:2)
试试这个:
function compare(a,b, compareArray) {
if ((compareArray.indexOf(a) != -1 && compareArray.indexOf(a) < compareArray.indexOf(b))
|| compareArray.indexOf(b) == -1)
return -1;
if ((compareArray.indexOf(a) > compareArray.indexOf(b))
|| compareArray.indexOf(a) == -1)
return 1;
return 0;
}
答案 1 :(得分:0)
var Array1 = ['quick', 'fox', 'the', 'brown', 'abc']; //the array to be sorted
var Array2 = ['the', 'quick', 'brown', 'fox'];
var sortedAry = [];
for (var i = 0; i < Array2.length; i++) {
var index = Array1.indexOf(Array2[i]);
if (index !== -1) {
console.log(index);
sortedAry.push(Array2[i]);
Array1.splice(index, 1);
}
}
for (var j = 0; j < Array1.length; j++) {
sortedAry.push(Array1[j]);
}
console.log(sortedAry);
答案 2 :(得分:0)
我今天遇到了做同样事情的需要,这是我的解决方案:
var arr = [".", 5359, 1, 2, 3, 4, 6, 9, 15];
var priorities = [3, '.', 1, 4, 15, 9, 2, 6];
var resultArr = arr.filter( function(arrElement) { return priorities.indexOf(arrElement) >= 0 })
.sort( function (a,b) { return priorities.indexOf(a) - priorities.indexOf(b) })
.concat( arr.filter( function(arrElement) { return priorities.indexOf(arrElement) < 0})
);
console.log(resultArr.join(""));
console:3.14159265359
jsfiddle based on @rps's answer
基本上,它挑选出我们有首选订单的元素,对它们进行排序,然后追加我们没有订单偏好的元素。作为奖励(至少在我的用例中),排序对arr
的顺序是非破坏性的。
我不确定这是好还是坏,但我知道我厌恶for
循环。 :)