5

選択リストにknockout.jsを使用してソートされたリストがありました。番号なしリストに変換したい。knockout.jsでリストをソートする方法とは?エラーは allItems().length > 1 であると考えています

http://jsfiddle.net/infatti/Ky5DK/

var BetterListModel = function () {
    this.allItems = ko.observableArray([
        { name: 'Denise' },
        { name: 'Charles' },
        { name: 'Bert' }
    ]); // Initial items

    this.sortItems = function() {
        this.allItems.sort();
    };
};

ko.applyBindings(new BetterListModel());


<button data-bind="click: sortItems, enable: allItems().length > 1">Sort</button>
4

2 に答える 2

7
var BetterListModel = function () {
    this.allItems = ko.observableArray([
    { name: 'Denise' },
    { name: 'Charles' },
    { name: 'Bert' }
    ]); // Initial items

    this.sortItemsAscending = function() {
        this.allItems(this.allItems().sort(function(a, b) { return a.name > b.name;}));
    };

    this.sortItemsDescending = function() {
        this.allItems(this.allItems().sort(function(a, b) { return a.name < b.name;}));
    };
};

行の説明: weWiliChangeTheArrayToValue(weWilSortTheArrayWithASpecialFunction(ComparatorFunction))

ComparatorFunction すなわち。

function(a, b) { return a.name < b.name;} 

は、ソート機能がうまくソートできるようにする特別な機能です。
2 つの引数を取り、それらを比較して、最初の引数が「大きい」場合 (リスト上でさらに離れている必要があります) を返し、最初の引数が「小さい」場合は false を返します
。すべて順調です。
順序の変更は、通常は true を返すはずの関数が false を返すようにすることで行われます。これを行う最も簡単な方法は、> 操作を < に変更することです。

もう 1 つ編集します。ASCII 以外の文字を比較する場合は、return a.localCompare(b); を使用します。(そして return b.localCompare(a);) そして数値を扱うときは "-" を使うので算術演算です

EDIT2
上記の方法 ">" は、配列の使用で重複して壊れる可能性があることを警告します

return a.name < b.name ? -1 : a.name > b.name ? 1 : 0;

代わりに (または localCompare のみ)

于 2013-07-18T14:23:56.730 に答える