2016-05-31 3 views
2

私はオブジェクトJS内の小さなコードスニペットを使用して、オブジェクト 'categories'の値を検索し、対応するキーを挿入しようとしています。新しいマップsortedCategoriesの値のペア。JSリントエラー:ループ内で関数を作成しないでください - 回避策なし

var categoriesToSort = []; //categoriesToSort has some values 
var sortedCategories = new Map(); 
for(var j = 0 ; j < categoriesToSort.length ; j++) { 
    categories.forEachMap(function(key, value){ 
     if(categoriesToSort[j] === value) { 
      sortedCategories.set(key, value); 
     } 
    }); 
} 

しかし、これは私に以下の糸くずりエラーを与えています。私は回避策を得ていません。

のforEachを使用する代わりに、forループについて、ループ内の機能

+0

これが求められている[一度か二度の前に](http://stackoverflow.com/search?q=%5Bjslint%5D+Don%27t+make+functions+within+a+loop)。良い答え[ここ](http://stackoverflow.com/a/3038555/1028230)、とりわけ。投票を終了する。 – ruffin

答えて

0

どのようにしないでください?

var categoriesToSort = []; //categoriesToSort has some values 
var sortedCategories = new Map(); 
categoriesToSort.forEach(function (cat) { 
    categories.forEachMap(function(key, value){ 
     if(cat === value) { 
      sortedCategories.set(key, value); 
     } 
    }); 
}); 
+0

FWIW、これは警告しようとしているパフォーマンス関連の問題を保存します。 –

0

このようなコードをリファクタリングする理由が表示されません。基本的には、ループからコールバック関数を取り除いて、クロージャの中の変数jをそのまま使用します。私はvar j宣言をコールバックの上に移動して見栄えを良くしましたが、技術的には必要ありません。

var categoriesToSort = []; //categoriesToSort has some values 
var sortedCategories = new Map(); 
var j; 
var itter = function(key, value) { 
    if(categoriesToSort[j] === value) { 
     sortedCategories.set(key, value); 
    } 
}; 
for(j = 0 ; j < categoriesToSort.length ; j++) { 
    categories.forEachMap(itter); 
} 
+0

ありがとう!これは機能します。しかし、forEachMapが値を見つけてマップに設定すると、forEachMapから抜け出したい場合はどうすればよいでしょうか。どうすればそれをすることができますか? – aaggarwal

+0

@aaggarwalコールバックで 'j = categoriesToSort.length;'を実行するか、ループ条件内の別の変数をfalseに設定してブレークさせることができます。 –

+0

forEachの "break out"には、代わりに 'some'のようなものを使います。 –

関連する問題