10

バックグラウンド

次のように定義および設定されたオブジェクト (ユーザー) の配列があります。

// object definition
function Users()
{
  this.Id = null;
  this.Name = null;
  this.FirstName = null;
  this.LastName = null;
  this.IsActive = null;
  this.Title = null;
  this.index = null;
  this.selected = null;
}

// object array
var AllUsers = [];

// ...
// an ajax call retrieves the Users and adds them to the AllUsers array
// ...

インデックス値は、取得された順序で各ユーザーに設定されます。ユーザーが取得されると、それらを 1 つずつ選択し、リストからページ上のテーブルに移動できます。選択するselectedと、配列内の選択されたオブジェクトのプロパティが true に設定されます。

選択したすべてのユーザーを返すために grep を使用しています。

var SelectedUsers = $.grep(AllUsers,function(obj){
  return obj["selected"] == true;
});

返されるデータの例を次に示します。

[ 
  Object { 
    Id="00540000001AbCdEFG", 
    Name="First Last1", 
    FirstName="First", 
    LastName="Last1", 
    Title="Title", 
    index=56, 
    selected=true 
  },
  Object { 
    Id="00540000001AbChIJK", 
    Name="First Last2", 
    FirstName="First", 
    LastName="Last2", 
    Title="Title", 
    index=12, 
    selected=true 
  },
  Object { 
    Id="00540000001AbClMNO", 
    Name="First Last3", 
    FirstName="First", 
    LastName="Last3", 
    Title="Title", 
    index=92, 
    selected=true 
  }
]

質問

データをページングできるようにしたいのですが、そのためには、選択した次および前のユーザーをインデックスで取得できる必要があります。どうやってやるの?

たとえば、テーブルで最初に選択したユーザー (インデックス = 56) を開いた場合、次のインデックス (インデックス = 92 の 3 番目に選択したユーザー) を持つユーザーを取得するにはどうすればよいですか?

JSFiddle

4

3 に答える 3

3

フィドル: http: //jsfiddle.net/iambriansreed/KEXwM/

JavaScriptが追加されました:

SelectedUsers.sort(function(a,b){
      return a.index == b.index ? 0 : (a.index < b.index ? -1 : 1)});

元の配列を変更したくない場合はSelectedUsers、新しい変数への並べ替えを定義します。

var SortedSelectedUsers = SelectedUsers.slice(0);
SortedSelectedUsers.sort(function(a,b){
      return a.index == b.index ? 0 : (a.index < b.index ? -1 : 1)});
于 2012-06-20T16:28:55.687 に答える
3

配列をインデックスでソートしないのはなぜですか?

allUsers.sort(function(a, b) {
    return(a.index - b.index);
});

次に選択されたユーザーは、選択された配列内の次のユーザーになります。選択したユーザーが見つかるまで、配列をたどることができます。

または、grep 関数を使用して、選択したすべてのユーザーを取得し、それをインデックスで並べ替えて、次に選択したユーザーが次のように selectedUsers 配列の次のユーザーになるようにすることもできます。

var SelectedUsers = j$.grep(AllUsers,function(obj){
  return obj["selected"] == true;
}).sort(function(a, b) {
    return(a.index - b.index);
});
于 2012-06-20T16:26:02.147 に答える
2

インデックスによる独自のソート関数を実装します。

function compareUsers(a,b)
{
    return (a.index - b.index);
}

そして、オブジェクトを並べ替えます。

SelectedUsers.sort(compareUsers);

これで、すべてのインデックスが正しい順序になりました。これから、インデックス番号で次または前のオブジェクトを簡単に取得できます。

于 2012-06-20T16:34:14.153 に答える