6

重複の可能性:
JavaScript-整数の別の配列に基づいて配列を
並べ替えるJavascript-別の配列に基づいて配列を並べ替える

このような配列がある場合:

['one','four','two']

そしてこのような別の配列:

[{
  key: 'one'
},{
  key: 'two'
},{
  key: 'four'
}]

keyプロパティが最初の配列に従うように2番目の配列を並べ替えるにはどうすればよいですか?この場合、私は欲しいです:

[{
  key: 'one'
},{
  key: 'four'
},{
  key: 'two'
}]
4

2 に答える 2

6

sort()関数を使用して、比較を行うカスタム関数を渡すことでこれを行うことができます。この関数は、指定された3つの可能な値を返すab、比較する必要があります。

return -1aインデックスがb

return 0a等しいと見なされる場合b

return 1aがより大きいインデックスが付けられている場合b

これを念頭に置いて、次のような関数を定義できます。

function sortFunction(a,b){
    var indexA = arr.indexOf(a['key']);
    var indexB = arr.indexOf(b['key']);
    if(indexA < indexB) {
        return -1;
    }else if(indexA > indexB) {
        return 1;
    }else{
        return 0;       
    }
}

この関数は、配列で定義したオブジェクトを取り込み、その値がarr配列のどこにあるかを見つけます。これは、比較している配列です。次に、インデックスを比較し、必要に応じて値を返します。

この関数を使用するには、関数を次のsort()ように関数に渡します。

testArray.sort(sortFunction)

testArray並べ替えようとしている配列はどこにありますか。

ここで、この例を実行したところを見ることができます。また、並べ替え関数が呼び出される前後に、配列内の2番目のオブジェクトが「アラート」されていることがわかります。 http://jsfiddle.net/Sqys7/

于 2012-11-22T19:02:55.533 に答える
4

これが私の見解です:

function orderArray(array_with_order, array_to_order) {
    var ordered_array = [], 
        len = array_to_order.length,
        len_copy = len,
        index, current;

    for (; len--;) {
        current = array_to_order[len];
        index = array_with_order.indexOf(current.key);
        ordered_array[index] = current;
    }

    //change the array
    Array.prototype.splice.apply(array_to_order, [0, len_copy].concat(ordered_array));
}

実装例:

var array_with_order = ['one', 'four', 'two'],

    array_to_order = [
        {key: 'one'},
        {key: 'two'},
        {key: 'four'}
    ];

orderArray(array_with_order, array_to_order);

console.log(array_to_order); //logs [{key: 'one'}, {key: 'four'}, {key: 'two'}];

通常のフィドル: http: //jsfiddle.net/joplomacedo/haqFH/

于 2012-11-22T19:16:20.450 に答える