Javascript自定义数组按数组排序

Javascript custom array sort by array

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

我现在有这个函数,它按字母顺序对数组进行排序。

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'];

可能有一个简单的答案我看不到。

编辑:

此外,数组1中不在数组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;
}

http://jsfiddle.net/AMSDE/

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

我今天遇到了做同样事情的需要,这就是我的解决方案:

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(""));

控制台:3.14159265359

jsfiddle基于@rps的答案

基本上,它会挑选出我们有优先顺序的元素,对它们进行排序,然后添加我们没有优先顺序的元件。作为一个额外的好处(至少对于我的用例),排序对arr的顺序是无损的。

我不确定这是好是坏,但我知道我讨厌for循环。:)