我一直对处理这个问题的最佳方法感到困惑。我过去使用的方法是有效的,但似乎必须有更好的方法。
下面我有一段代码,我想为函数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