2016-08-21 11 views
0

これを処理する最善の方法について私は常に混乱してきました。私が過去の作品で使用してきた方法ですが、より良い方法がなければならないようです。関数内のJavascriptブレーク/リターン関数

以下、私は、の関数getDataを返したいコードセクションがあります。問題は以下の例ではgetData関数ではなく、forEach関数の戻り値です。

function getData() { 
    var array = ["element1","element2"]; 
    array.forEach(function (item) { 
     if (item == "element2") { 
      return item; 
     } 
    }); 
} 

私はこれを克服するためにこのようなことをしてきました。

function getData() { 
    var array = ["element1","element2"]; 
    var returnValue; 
    array.forEach(function (item) { 
     if (item == "element2") { 
      returnValue = item; 
     } 
    }); 
    if (returnValue) { 
     return returnValue; 
    } 
} 

これを処理するには良い方法はありますか?コードの余分な4行のように思えるだけで、混乱と私のコードに混乱を作成します。

+5

['Array.prototype.find()'](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/find)または['Array.prototype.indexOf' ](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf) – zerkms

+0

forループを使用したばかりの場合、問題なく返すことができます。それに失敗すると、あなたは上記のようなことをする必要があります。 – Whothehellisthat

+0

最後に 'if'ステートメントを削除することで、単純化することができます。 returnValueが設定されていない場合は 'undefined'となるので、undefinedを返します。ifが失敗したときと同じです。関数はとにかく 'undefined'を返します。 – Whothehellisthat

答えて

1

あなたは配列内のいくつかの要素が設けられた関数によって実装試験に合格するかどうかをArray#some

some()方法テストを使用することができます。

function getData() { 
    var array = ["element1","element2"]; 
    var returnValue; 
    array.some(function (item) { 
     if (item == "element2") { 
      returnValue = item; 
      return true; 
     } 
    }); 
    return returnValue; 
} 

あるいは、あなたがES6を使用する場合、Array#find

find()方法を使用して、アレイ内の要素が与えられたテスト関数を満たす場合、配列内valueを返します。さもなければ未定義はreturnedである。

function getData() { 
    var array = ["element1","element2"]; 
    return array.find(item => item == "element2"); 
} 
+1

同じ問題ですが、それはもっと効率的なものになるでしょう、私は同意します。 – Whothehellisthat

+0

@Whathhellisthat "問題"とはどういう意味ですか? – zerkms

+0

@ニーナ・ショルツ:ES2015を使用する場合、矢印機能でさらに多くを得ることができます。 – zerkms

0

あなたが容易にArray#indexOfでこれを行うことができます。

function getData() { 
    var array = ["element1","element2"]; 
    var index = array.indexOf("element2"); 
    return index === -1 ? null : array[index]; 
} 

その場合は、あなたが探していることは、あなたが持っているもののため===一致しているので、それが動作します。あなたは、より複雑な条件に基づいて一致を指定することができます

function getData() { 
    var array = ["element1","element2"]; 
    return array.find(function (item) { 
     return item == "element2"; 
    }); 
} 

...:より一般的な場合には、ES2015の事ですが、ES5のため、以下のことができます簡単にshim/polyfillそれをArray#findためのケースです。

0

あなただけのindexOf使用することができます、それは価値が見つからない場合

return array[array.indexOf("element2")]; 

を、インデックスが-1になります。配列のインデックス-1はundefinedになります。

関連する問題