2016-08-21 78 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