jQuery.each两个键同时出现

时间:2012-08-10 09:56:59

标签: jquery foreach

我有这个数组:

row = [ "one", "two", "three", "four", "five", "six" ]

我想用以下内容进行迭代:

row.each(function(key, value){ doStuff(key); });

但我想在同一次迭代中抓住“一个”和“两个”以及之后的“两个”和“三个”等。

这样我想使用jsPlumb将每个关键元素相互连接起来,以创建一种“训练”元素。

我每次都可以手动询问row[x+1](如果你知道我的意思),但我想知道是否有.each或自定义函数的参数来实现这一点,所以我甚至可以同时抓住3把钥匙......

所以我可以这样做:

row.eachTwo(function(key, value){ doStuff(key[0], key[1]); });

4 个答案:

答案 0 :(得分:2)

正如您所见there。您无法使用函数.each执行此操作。最好的方法是自己实施

答案 1 :(得分:1)

如果您对一次只处理两个值感到满意,我猜你可能会滥用数组的reduce方法:

​["one", "two", "three"].reduce(function(value1, value2) {
  doSomething(value1, value2);
  return value2;
});​​​

答案 2 :(得分:1)

您可以创建自己的.eachTwo()功能

jQuery.fn.eachTwo = function(fn)
{
    var self = this;
    return this.each(function(key, el)
    {
        if (self.hasOwnProperty(key+1))
            fn.call(this,self[key],self[key+1],el)
    });
};

var row = [ "one", "two", "three", "four", "five", "six" ];

$(row).eachTwo(function(i,j){
    console.log(i+" "+j);
});​

DEMO

答案 3 :(得分:0)

所以我想我会这样做:

oldKey = "one";

row.each(function(key, value){

if (key == oldKey)
{
    console.error("SAME");
}
else
{
    jsPlumb.connect({
                    source: key, 
                    target: oldKey,
                    anchor:"Continuous",
            });
}
oldKey = key; 
});

只是我只需要用key == oldKey捕获第一个副本,但我正在寻找一种更简单,更优雅的方式,.next()似乎很简单,但是不行在数组或简单对象..