Javascript 是否按属性值获取数组中的下一个对象? 背景
我有一个对象(用户)数组,定义和设置如下:Javascript 是否按属性值获取数组中的下一个对象? 背景,javascript,jquery,Javascript,Jquery,我有一个对象(用户)数组,定义和设置如下: // 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; } // objec
// 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的第三个选定用户)
为什么不按索引对数组排序呢
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);
});
小提琴:
添加了JavaScript:
SelectedUsers.sort(function(a,b){
return a.index == b.index ? 0 : (a.index < b.index ? -1 : 1)});
通过索引实现您自己的排序功能:
function compareUsers(a,b)
{
return (a.index - b.index);
}
并对对象进行排序:
SelectedUsers.sort(compareUsers);
现在,所有索引的顺序都正确了。由此,可以很容易地通过索引号获得以下或之前的对象。+1对于解释得很好的问题以及小提琴,似乎您必须对数组进行排序或重新排列,以满足您的需要;如果数组很小,它应该足够有效地遍历所有元素,以对它们进行不同的索引。@Mahn无需这样做,
sort()
函数就足够了。感谢OP.$。grep对我来说是一个新的。array.sort()
将数组排序到位。始终修改原始数组。请参阅此测试示例:sort始终修改数组,复制引用将无济于事。感谢@jfriend00和Bergi-修复了它。使用克隆数组可能会保留原始数组。为什么使用返回a.index==b.index?0:(a.index
当return(a.index-b.index)
更简单时?-1排序alluser
不是没有必要的,因为他只需要对所选的用户进行排序
@iambriansreed-我提供这两个选项,OP可以决定哪个更适合他们的需要。与每次执行grep相比,让主数组保持排序可能更容易-这取决于对其执行的其他操作以及主数组的其他用途。-1正如我在回答的评论中提醒的那样,您正在此处创建两个排序数组:SortedUsers
和SelectedUsers
@IAMBRIANSRED您完全正确,sort()
直接在阵列上工作。我将修正我的答案,谢谢你指出。
SelectedUsers.sort(compareUsers);