0

私はこの配列を持っています:

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

次のようなもので繰り返したい:

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

しかし、同じ繰り返しで「1」と「2」、その後「2」と「3」などを取得したいと思います。

このようにして、jsPlumb を使用して各キー要素を相互に接続し、要素の一種の「トレイン」を作成したいと考えています。

row[x+1]毎回手動で要求することもできますが (意味がわかれば)、.eachこれを実現するための引数またはカスタム関数があるかどうか疑問に思っていたので、同時に 3 つ以上のキーを取得することさえできました..

だから私は次のようなことができます:

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

4 に答える 4

2

ご覧のとおりです。function ではできません.each。最善の方法は、自分で実装することです

于 2012-08-10T10:02:28.777 に答える
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);
});​

デモ

于 2012-08-10T11:20:47.097 に答える
1

reduce一度に 2 つの値のみを処理することに満足している場合は、Arrayのメソッドを悪用できると思います。

​["one", "two", "three"].reduce(function(value1, value2) {
  doSomething(value1, value2);
  return value2;
});​​​
于 2012-08-10T10:11:10.410 に答える
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()は素晴らしくシンプルですが、配列や単純なオブジェクトでは機能しません..

于 2012-08-10T10:21:23.007 に答える