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
// ...

每个用户的索引值设置为检索它们的顺序。一旦检索到用户,就可以一个一个地选择它们,并将它们从列表移动到页面上的表中。选择后,该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 的第三个选定用户)?

JSFiddle

4

3 回答 3

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 回答
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 回答
2

按索引实现自己的排序功能:

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

并对对象进行排序:

SelectedUsers.sort(compareUsers);

现在您拥有正确顺序的所有索引。由此,很容易通过索引号获取后面或前面的对象。

于 2012-06-20T16:34:14.153 回答