函数内的Javascript break / return函数

时间:2016-08-21 21:28:06

标签: javascript

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

下面我有一段代码,我希望为函数item返回getData。问题在下面的示例中,它返回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行代码只会在我的代码中造成混乱和混乱。

3 个答案:

答案 0 :(得分: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 :(得分: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";
    }); 
}

...它允许您根据更复杂的条件指定匹配。

答案 2 :(得分:0)

你可以使用indexOf:

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

如果找不到该值,则索引将为-1。任何数组的索引-1都是undefined