如果找到three
,那么它应该返回true并停止迭代。否则,如果找不到则返回false。
我正在使用filter()
- 这是错误的使用方法吗?
var data = [
'one',
'two',
'three',
'four',
'three',
'five',
];
found = data.filter(function(x) {
console.log(x);
return x == "three";
});
console.log(found);
答案 0 :(得分:6)
您可以在此背景下使用array#some
,
var data = [
'one',
'two',
'three',
'four',
'three',
'five',
];
found = data.some(function(x) {
return x == "three";
});
console.log(found); // true or false
如果使用filter
,则将根据callBack
函数内返回的truthy值过滤数组。因此,如果找到任何匹配的含义,如果函数返回值true
,则该特定迭代的元素将被收集在array
中,最后将返回该数组。
因此,在您的情况下,["three", "theree"]
将作为结果返回。如果你没有任何"three"
,那么将返回一个空数组。在这种情况下,你必须进行额外的检查以找到结果的真值。
例如:
var res = arr.filter(itm => someCondition);
var res = !!res.length;
console.log(res); //true or false.
为了避免过度杀戮的情况,我们正在使用Array#some。
答案 1 :(得分:0)
var data = [
'one',
'two',
'three',
'four',
'three',
'five',
];
for(var i=0;i<data.length;i++){
console.log(data[i]);
if(data[i]=="three"){
var found=data[i];
break;
}
}
console.log(found);
答案 2 :(得分:0)
你必须返回false才能退出函数,但是你已经在过滤函数中使用了return语句而你不能使用2个返回语句......我想出的另一个解决方案是:
var data = [
'one',
'two',
'three',
'four',
'three',
'five',
];
var filteredData = [];
function a(i,e){
console.log(e);
if(e == "three"){
filteredData.push(e);
return false;
}
}
$(data).each(a);
console.log(filteredData);
一旦命中“三”就会爆发,并将其存储在filteredData数组中,以便将来可以使用它... 希望这会有所帮助......
答案 3 :(得分:0)
直接的方法。
var data = [
'one',
'two',
'three',
'four',
'three',
'five',
];
found = data.indexOf('three') == -1 ? false : true;
console.log(found);