我有一个对象数组(用户)定义和设置如下:
// 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
// ...
索引值在每个用户上设置为检索它们的顺序。检索到用户后,可以逐个选择这些用户,然后将其从列表移动到页面上的表格。在select时,对于数组中的选定对象,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的第三个选定用户)?
答案 0 :(得分: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);
});
答案 1 :(得分: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)});
答案 2 :(得分:2)
通过索引实现自己的排序功能:
function compareUsers(a,b)
{
return (a.index - b.index);
}
对对象进行排序:
SelectedUsers.sort(compareUsers);
现在您按正确的顺序拥有所有索引。由此,可以通过索引号轻松获得以下或前一个对象。