41
31

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Array.forEachでbreak出来ないぐぬぬってなったらArray.some

Last updated at Posted at 2016-05-12

Array.forEachでbreakは使えないんじゃよの巻

配列を上から順に見て、一番最初に見つかった男性キャラの名前を表示したいとします

let characters = [
                  {
                   name: "阿良々木暦",
                   gender: "male"
                  },
                  {
                   name: "戦場ヶ原ひたぎ",
                   gender: "female"
                  },
                  {
                   name: "八九寺真宵",
                   gender: "female"
                  },
                  {
                   name: "神原駿河",
                   gender: "female"
                  },
                  {
                   name: "千石撫子",
                   gender: "female"
                  },
                  {
                   name: "羽川翼",
                   gender: "female"
                  },
                  {
                   name: "忍野メメ",
                   gender: "male"
                  },
                  {
                   name: "忍野忍",
                   gender: "female"
                  }
];

// Uncaught SyntaxError: Illegal break statement
characters.forEach(function(character){
    if(character["gender"] === "male"){
        console.log(character["name"]);
        break;
    }
});

予期した結果としては「阿良々木暦」と表示されるはずですが、
「Uncaught SyntaxError: Illegal break statement」と怒られます。
C#のforeach等と同じ感覚では使えないわけです。

ここでforEachを__some__、breakを__return true__に置き換えます。

// 「阿良々木暦」と表示される
characters.some(function(character){
    if(character["gender"] === "male"){
        console.log(character["name"]);
        return true;
    }
});

これで期待した動作をします!簡単ですね!

本来のArray.someの使い方

実は先ほどのコードでは、someメソッド自体もtrueを返しています。
これはArray.someが__第一引数に与えられた関数がtrueを返すまでループを回す__メソッドであるからです。
配列の最後の要素まで行ってtrueが返らなかった場合にのみArray.someはfalseを返します。
なので、本来の使い方としてはこんなところではないでしょうか。

// 忍ちゃんがいたらドーナツを買う
function shouldBuyDonut(characters){
    return characters.some(function(character){
        return character["name"] === "忍野忍";
    });
}
41
31
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
41
31

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?