作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
给定一个 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)中有什么快速而优雅的方法可以做到这一点吗?
编辑:
我不想像某些答案中建议的那样获得 (key, value) 的迭代器。我想要一个对象中成对属性的迭代器。
例如,我想运行一个检查来验证每个值最多与任何其他值相差 10 个单位。
function checkIsClose(v1, v2) {
return ((v1 - v2) < 10 && (v1 - v2) >= 0)) || ((v2 - v1) < 10 && (v2 - v1) >= 0);
}
最佳答案
试试这个, Demo
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)
关于javascript - 遍历成对的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23469383/
我是一名优秀的程序员,十分优秀!