2017-05-03 8 views
0

を使用してループ内の機能をしないでください。ループ内の機能を加えないでくださいjshint - 私はこの質問は、しばらくの間、回避されているが、私は(私はいずれかを逃した場合は申し訳ありません)私の場合を解決できる答えを見つけることができます知っているArray.find

for(let i=0; i<array.length; i++) { 
    let value = array[i]; 
    let anotherValue = anotherArray.find(val => val.key === value.key); 
} 

このコードはjshintが警告をスローするようになります:

はとにかく、私は次のコードを持っています。 (W083)

"for"スコープ内にある変数にアクセスする必要があるという事実から、その中に関数が宣言されている必要があります。

私は、次の方法を試してみました:

let myFunc = (val) => { 
    //no value here to compare 
} 
for(let i=0; i<array.length; i++) { 
    let value = array[i]; 
    let anotherValue = anotherArray.find(myFunc); 
} 

私はため外にそれを宣言した場合、私は変数にアクセスすることはできません。あなたはvalueを取ると、まだ機能していすることができるようにするために、代わりに

array.forEach((value) => { 
    let anotherValue = anotherArray.find(val => val.key === value.key); 
    /* do anything with anotherValue */ 
} 

curry your functionをすることができます:

let myFunc = candidate => target => candidate.key === target.key; 
for (let i = 0; i < array.length; i++) { 
    let anotherValue = anotherArray.find(myFunc(array[i])); 
} 

そして、まだ、代わりに

+0

ちょうどその警告メッセージをオフにします。 –

+0

問題はメッセージではありません。それは簡単に取り除くことができます。私はそれがより良い実装でなければならないと考えています。 –

+1

あなたの実装はまったく問題ありません。 –

答えて

1

代わりfor -loopのArray.forEachを使用してみてください

012:あなたはあなたのファイルの先頭にディレクティブを追加することで、このファイルにこのルールを無視するJSHintを伝えることができます
+1

カレーアプローチは、ループの各反復で関数を生成します。 –

+0

"関数ジェネレータ"がループ外で定義されているので、jshintがそれに不平を言うとは思わない。私はこれをテストしていない。 –

関連する問題

 関連する問題