1

我目前有这个按字母顺序对数组进行排序的函数。

function compare(a,b) {
    if (a.subtitle < b.subtitle)
        return -1;
    if (a.subtitle > b.subtitle)
        return 1;
        return 0;
}

我需要一个类似的函数来按另一个数组对数组进行排序。我试着自己写它,但我无法理解它,所以我最终一无所获。

例子:

我需要根据该项目在array2 中的位置对array1 进行排序。

Array1 = ['quick','fox','the','brown'];
Array2 = ['the','quick','brown','fox'];

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

编辑:

此外,任何不在数组 2 中的数组 1 中的项目都可以不按特定顺序或按字母顺序添加到末尾,更容易。

4

3 回答 3

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;
}
于 2013-08-19T05:16:19.457 回答
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);
于 2013-08-19T05:38:17.380 回答
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(""));

安慰:3.14159265359

jsfiddle 基于@rps 的回答

基本上,它会挑选出我们有优先顺序的元素,对它们进行排序,然后附加我们没有优先顺序的元素。作为奖励(至少对于我的用例而言),排序对arr.

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

于 2014-10-02T17:22:05.117 回答