迭代属性对
Iterate through pairs of properties
给定一个JS对象:
var obj = {
p1: "v1",
p2: "v2",
...,
pn: "vn"
}
我想做的是获得一个遍历所有不同的属性对的迭代器(名称或值对我来说都可以)。
所以我可以有这样一个函数:function(va, vb) {
// do something with every pair
}
在对集合("v1", "v2"), ("v1", "v3"),…, ("v1", "vn"), ("v2", "v3"),…, ("v2", "vn"),…, ("vn-1", "vn")(共n(n - 1)/2次)
简单的解决方案是使用双for ... in
循环并丢弃其中的重复,但这既不快速也不优雅。
如果是数组而不是对象,则可以进行不同类型的迭代,如:
var len = obj.length;
for (var i = 0; i < len - 1; i++) {
for (var j = i + 1; j < len; j++) {
// do something with obj[i], obj[j]
}
}
但是我不知道有什么方法可以像这样迭代一个对象(或者它是否有意义!)。
那么,在javascript(或jQuery)中是否有任何快速而优雅的方法来做到这一点?
编辑:我不想得到一个(键,值)的迭代器在一些答案中建议。我想要一个遍历对象中属性对的迭代器。
例如,我想运行一个检查,验证每个值与任何其他值的距离最多为10个单位。
function checkIsClose(v1, v2) {
return ((v1 - v2) < 10 && (v1 - v2) >= 0)) || ((v2 - v1) < 10 && (v2 - v1) >= 0);
}
试试这个,演示
var obj = {
p1: "v1",
p2: "v2",
pn: "vn"
}
$.each(obj, function(a, b){alert(a);alert(b)});
更新:$.each(obj, function(a, b1){
$.each(obj, function(a, b2){
console.log(b1 +" ,"+ b2);
})
});
演示输出:("v1", "v2"), ("v1", "v3"), ... , ("v1", "vn"), ("v2", "v3"), ... , ("v2", "vn"), ... , ("vn-1", "vn"). (A total of n(n - 1)/2 times)
https://api.jquery.com/jQuery.each/我想不出像这样迭代对象的其他方法,而不是for…在。但是你可以每次删除一个键,这将使它总共n(n - 1)/2次。
http://jsfiddle.net/XiozZe/YTVAL/var obj = {
p1: "v1",
p2: "v2",
p3: "v3",
p4: "v4",
p5: "v5",
p6: "v6",
}
//duplicate obj
var obj2 = {}
for (var i in obj) {
obj2[i] = obj[i];
}
for(var i in obj2){
for(var j in obj2){
// do something with obj[i], obj[j]
}
delete obj2[i];
}
//obj2 is now empty
执行jQuery.map():
jQuery.map(obj, function(vb, va) {
// do something with every pair
});
在提琴中测试
相关文章:
- 如何使用jquery迭代具有相同属性的html元素并查找onclick事件
- 使用递归属性迭代保留属性结构
- 在对象上迭代.解构其键和属性并添加新的键和属性
- MongoDB属性迭代
- 迭代 DOM 中的属性
- 为什么我的jQuery .每次迭代都无法使用每个项目的属性
- 如何迭代json对象的嵌套属性并创建新的数组列表
- 创建一个生成器来迭代对象属性排列
- 在对象上迭代'的属性
- 在对象上迭代并添加新属性
- 使用 for 循环,如何迭代对象以向其添加 id 属性
- 访问特定属性并在 AngularJS 中迭代 JSON 数组
- 从数据绑定属性迭代键值对
- 如何轻松获取Javascript for loop的当前迭代属性
- BackboneJS:迭代模型属性并更改值
- 我的 JS 对象迭代在添加新属性时中断
- 如何附加具有迭代属性的元素
- 所有属性都设置为上次循环迭代值 [为什么?
- 访问并迭代模板内Kendo UI Listview的数组属性
- 对不可枚举属性进行迭代