按属性值获取数组中的下一个对象
Get next object in an array by property value?
Background
我定义和设置了一个对象数组(用户),如下所示:
// 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
}
]
问题
我希望能够对数据进行分页,为此,我需要能够按索引获取下一个和上一个选定的用户。我该怎么做?
例如,如果我在表中打开第一个选定用户 (index=56),如何获取具有下一个索引的用户(第三个选定用户,索引=92)?
JSFiddle
小提琴: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)});
为什么不按索引对数组进行排序?
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);
});
按索引实现自己的排序函数:
function compareUsers(a,b)
{
return (a.index - b.index);
}
并对对象进行排序:
SelectedUsers.sort(compareUsers);
现在,所有索引都按正确的顺序排列。由此,很容易按索引号获取以下或前面的对象。
相关文章:
- Javascript(Angular)从一个对象数组到第二个数组查找值
- jQuery$.inArray()总是返回-1和一个对象数组
- javascript处理一个对象数组以获得一个新的对象数组
- 我想遍历一个对象数组,我不想要任何重复项
- 尝试在一个对象的值和一个对象数组之间进行匹配
- Mongoose模式:强制创建一个对象数组
- 可以't分配给一个对象数组javascript
- 如何在Javascript或jQuery中在一个对象数组中重复值
- 使用jQuery.ajax请求向PHP函数发送一个对象数组
- 如何将所有复选框放入一个对象数组并标记选中的复选框
- 循环遍历JQueryUI选项卡控件中的每个选项卡,并构建一个对象数组
- 用javascript将一个对象数组复制到另一个数组中(深度复制)
- 给定一个对象数组,创建一个函数,该函数返回一个 Object,该 Object 具有按类型分组的路径数组
- 如何存储一个对象数组,这些对象是 ajax 查询从 javascript 中的 JSON 中提取数据的结果
- 当我将一个对象链接到一个对象数组时,两个对象的值是如何链接的
- ng-repeat失败,并显示一个对象数组
- 我可以使用 Lodash 来“折叠”一个对象数组吗?
- 根据属性值 lodash 将属性从对象数组合并到另一个对象数组中
- JavaScript检查一个对象数组的结果是错误的,而它应该是真的
- 给定一个对象数组,找到具有特定键的对象