2017-06-19 11 views
1

私はこの質問のデュープを見つけるのに苦労してんだけど、私はそれは前に頼まれていますと仮定し....Javascriptの設定内の項目のインデックスを取得します

私はSetに3つの項目を追加する場合:

var s = new Set(); 
undefined 
s.add(1); s.add(2); s.add(3); 
Set(3) {1, 2, 3} 

...どのように私はアイテムのインデックスを見つけることができますか?

SetにはindexOfメソッドがありません。セットを反復処理するのが最善の方法であるかどうかはわかりません。私はforEach APIを使用してみましたが、この関数からできbreakreturnでもない:

if (s.size < cells.length) { 
    var count = 0; 
    s.forEach(function (value) { 
     if (cell.id.slice(0, -5) == value) { 
     break; //return fails here too... 
     } 
     count ++; 
    }); 
    return count; 
    } 
+0

「休憩」/「返品」の部分についてはhttps://stackoverflow.com/questions/3330193/early-exit-from-functionを参照 – treecon

+0

私の質問には関係ありません^^商品のインデックスをセットで取得することについては – JacobIRR

+0

@JacobIRRそれは休憩 '/「復帰」の部分に関連しています。あなたが言うように、あなたが機能を破ることができれば、あなたはあなたのソリューションを持っているでしょう。 – treecon

答えて

4

設定の目的は、注文番号を与えることはあまりありませんが、あなたは1が必要な場合は、実用的な解決策がにあります一時的にspread syntaxで配列にそれを回す:

count = [...s].indexOf(cell.id.slice(0, -5)); 

場合は、ループを好む何らかの理由、そして代わりにforEachsomeを使用します。

s.some(function (value) { 
    if (cell.id.slice(0, -5) == value) { 
    return true; // this will stop the iteration 
    } 
    count ++; 
}); 

それともES6 for ofループは使用しない理由:for ... inループは、配列で使用するために推奨されて古いスタイルの使用は、これはfor ... ofループのために保有していませんが:

for (value of s) { 
    if (cell.id.slice(0, -5) == value) { 
    break; // this will stop the iteration 
    } 
    count ++; 
} 

NBを。

+0

'[... S]'は何ですか?私はかつてそれを見たことがない。 – JacobIRR

+1

@JacobIRR:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator ...あなたはまた、代わりに '' Array.from(複数可)を使用することができます。 –

+0

はいああ 'from'は素晴らしいです。あなたのおかげで両方。これは機能します。 – JacobIRR

関連する問題