3

結果のリストを価格と評価で並べ替えようとしています。簡単にするために、Rider's Lodge と Olina Lodge の 2 つの結果だけを含めました。一方向に並べ替える関数を作成しました。

同じ関数を再利用して、[価格で並べ替え] をクリックすると昇順で並べ替え、もう一度クリックすると降順で並べ替え、2 つを切り替えるにはどうすればよいですか?

<div class="tab-content">
    <div id="filters">
        <p>
            <a href="javascript:sort_by_rating();">Sort by Rating</a>
            <br>
            <a href="javascript:sort_by_price();">Sort by Price</a>
        </p>
    </div>


    <div id="div_hotel_results" class="tab-pane active">
        <form id="hotel-form">
        ...
        </form>
        <div class="results-row">
            <h5>Riders Lodge</h5>
            <span class="label label-info price">$103.64</span>
            <span class="rating" data-rating="3.0">3.0</span>
        </div>

        <div class="results-row">
            <h5>Olina Lodge</h5>
            <span class="label label-info price">$99.64</span>
            <span class="rating" data-rating="2.5">2.5</span>
        </div>
    </div>
</div>

<script type="text/javascript">
function sort_by_price () {
    var sorted_list = [];
    $('.price').each(function (index) {
        sorted_list[index] = $(this).parent().parent().remove();
        sorted_list[index]['cleaned_price'] = parseFloat($(this).text().replace(/[^0-9\.]+/g,""));
    });

    sorted_list.sort(function (a, b) {
        if (a['cleaned_price'] == b['cleaned_price']) {
            return 0;
        } else if (a['cleaned_price'] > b['cleaned_price']) {
            return 1;
        } else {
            return -1;
        }
    });

    $('#hotel-form').after(sorted_list);
}
</script>
4

2 に答える 2

6

これが例です。評価ではなく、価格だけが欲しかったと思います。並べ替えの現在のステータスを追跡するのに役立つ変数を作成しました。次に、それに応じて昇順/降順にソートします。

また、イベント バインディングを html の外に移動しました。

ワーキングデモ

HTML:

<div class="tab-content">
    <div id="filters">
        <p>
            <a class="sortByRating" href="#" >Sort by Rating</a>
            <br>
            <a class="sortByPrice" href="#">Sort by Price</a>
        </p>
    </div>


    <div id="div_hotel_results" class="tab-pane active">
        <form id="hotel-form">
        ...
        </form>
        <div class="results">
            <div class="results-row">
                <h5>Riders Lodge</h5>
                <span class="label label-info price">$103.64</span>
                <span class="rating" data-rating="3.0">3.0</span>
            </div>

            <div class="results-row">
                <h5>Olina Lodge</h5>
                <span class="label label-info price">$99.64</span>
                <span class="rating" data-rating="2.5">2.5</span>
            </div>
        </div>
    </div>
</div>

Javascript:

var ascending = false;

$('.tab-content').on('click','.sortByPrice',function(){

    var sorted = $('.results-row').sort(function(a,b){
        return (ascending ==
               (convertToNumber($(a).find('.price').html()) < 
                convertToNumber($(b).find('.price').html()))) ? 1 : -1;
    });
    ascending = ascending ? false : true;

    $('.results').html(sorted);
});

var convertToNumber = function(value){
     return parseFloat(value.replace('$',''));
}
于 2013-03-24T14:55:00.620 に答える
0
//package algorithm.sort;

public class QuickSort 
{

    public static void main(String[] args) {
        int[] x = { 9, 2, 4, 7, 3, 7, 10 };
        printArray(x);

        int low = 0;
        int high = x.length - 1;

        quickSort(x, low, high);
        printArray(x);
    }

    public static void quickSort(int[] arr, int low, int high) {

        if (arr == null || arr.length == 0)
            return;

        if (low >= high)
            return;

        //pick the pivot
        int middle = low + (high - low) / 2;
        int pivot = arr[middle];

        //make left < pivot and right > pivot
        int i = low, j = high;
        while (i <= j) {
            while (arr[i] < pivot) {
                i++;
            }

            while (arr[j] > pivot) {
                j--;
            }

            if (i <= j) {
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
                i++;
                j--;
            }
        }

        //recursively sort two sub parts
        if (low < j)
            quickSort(arr, low, j);

        if (high > i)
            quickSort(arr, i, high);
    }

    public static void printArray(int[] x) {
        for (int a : x)
            System.out.print(a + " ");
        System.out.println();
    }
}
于 2014-11-24T10:08:26.877 に答える