2016-08-21 40 views
0

我一直對處理這個問題的最佳方式感到困惑。我過去一直使用的方法有效,但似乎必須有更好的方法。函數內部的Javascript中斷/返回函數

下面我有一段代碼,我想要爲函數getData返回item。問題出現在下面的示例中,它返回的功能不是getData函數。

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)or ['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

@Whathehellisthat你說「問題」是什麼意思? – zerkms

+0

@Nina Scholz:如果他們使用ES2015,他們可能會通過箭頭功能獲得更多。 – zerkms

0

你可以很容易地做到這一點與Array#indexOf

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

在這種情況下,它的作品,因爲你在尋找什麼是===你的對手有什麼。更普遍的情況是Array#find的情況下,這是一個ES2015的事情,但你可以很容易地shim/polyfill它ES5及以下:

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

...它可以讓你指定基於更復雜的條件下比賽。

0

你可以只使用的indexOf:

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

如果未找到該值,該指數將爲-1。任何數組的索引-1將爲undefined