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

私は今日同じことをする必要性に出くわしました、これが私の解決策でした:

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

@rpsの回答に基づくjsfiddle

基本的に、優先順序がある要素を選択し、それらを並べ替えてから、優先順序がない要素を追加します。おまけとして (少なくとも私の使用例では)、並べ替えは の順序で非破壊的ですarr

これが良いか悪いかはわかりませんが、forループが嫌いなのはわかっています。:)

于 2014-10-02T17:22:05.117 に答える
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 に答える