簡體   English   中英

函數中的Java斷行/返回函數

[英]Javascript break/return function within function

我一直對處理此問題的最佳方法感到困惑。 我過去一直使用的方法,但似乎必須有一個更好的方法。

下面我有一段代碼,我想返回getData函數的item 問題在下面的示例中,它返回的是forEach函數而不是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行代碼只會在我的代碼中造成混亂和混亂。

您可以使用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 undefined。

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

您可以使用Array#indexOf輕松地做到這一點:

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

在這種情況下,它之所以有效,是因為您要查找的是與您所擁有的匹配=== 更一般的情況是Array#find ,這是ES2015的事情,但是您可以輕松地對其進行填充/填充以用於ES5及以下版本:

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

...可讓您根據更復雜的條件指定匹配項。

您可以只使用indexOf:

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

如果找不到該值,則索引將為-1。 並且任何數組的索引-1都是undefined

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM