for(var i = 0; i < $gameParty.allItems().length; i++){ が重い

論よりショーゴ
記事: 24
登録日時: 2021年6月17日(木) 15:33

for(var i = 0; i < $gameParty.allItems().length; i++){ が重い

投稿記事by 論よりショーゴ » 2024年2月15日(木) 23:36

以下のようなfor文を使って、特定のアイテムを配列化しています。

コード: 全て選択

  for(var i = 0; i < $gameParty.allItems().length; i++){
    if($gameParty.allItems()[i].meta.test){
         arr.push($gameParty.allItems()[i]);
    }
  }


でも、所持しているアイテムの種類が多くなると、
全部のアイテムを読みに行く上記のコードはかなり重くなります。
もっと軽くする方法はありますか?

一般ピープル
記事: 7
登録日時: 2022年4月20日(水) 01:02

Re: for(var i = 0; i < $gameParty.allItems().length; i++){ が重い

投稿記事by 一般ピープル » 2024年2月15日(木) 23:45

コード: 全て選択

var allItems = $gameParty.allItems();
var arr = [];

for (var i = 0; i < allItems.length; i++) {
    var item = allItems[i];
    if (item.meta.test) {
        arr.push(item);
    }
}

forEach()のほうがいいかと思いますが、流れが分かりやすいようにしています。
一度変数に入れておけば、何度もアイテムリストを読みに行くことがなくなりますので
パフォーマンスが改善されるかと思います。

以下は、forEachの場合です。

コード: 全て選択

var arr = [];
$gameParty.allItems().forEach(function(item) {
    if (item.meta.test) {
        arr.push(item);
    }
});

お試ください。
論よりショーゴ
記事: 24
登録日時: 2021年6月17日(木) 15:33

Re: for(var i = 0; i < $gameParty.allItems().length; i++){ が重い

投稿記事by 論よりショーゴ » 2024年2月15日(木) 23:55

一般ピープル 様

ありがとうございます。
めちゃくちゃ早くなりました!
二つの処理方法まで教えてくれてとても助かりました。

“MV:質問” へ戻る