函数中的break/return函数



我一直对处理这个问题的最佳方法感到困惑。我过去使用的方法是有效的,但似乎必须有更好的方法。

下面我有一段代码,我想为函数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

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

最新更新