我一直对处理这个问题的最佳方法感到困惑。我过去使用的方法有效,但似乎必须有更好的方法。
下面我有一段代码,我希望为函数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行代码只会在我的代码中造成混乱和混乱。
答案 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
。