我有这些数组和变量:
var arr = [['one','blue'], ['two','red'], ['three','green']]
var variable = 'thre';
我也有这段代码:
arr.map(function(x){
if(x[0].indexOf(variable) >= 0)
{
alert('Number is found');
}
});
如您所知,它map
是一个循环,在上面的数组中,包含三个项,然后map
执行其语句3次。这样alert
就可以运行了。
现在,我试图限制映射,我的意思是我想执行2次语句。所以我for()
喜欢这样的用户:
for ( var c = 0; c < 2; c++ ) {
if ( arr[c][0].indexOf(variable) >= 0 )
{
alert('number is found');
}
}
但是^不起作用,它给了我这个错误:
未捕获的TypeError:无法读取未定义的属性“ 0”(在第2行中)
我该如何解决?
编辑:这是我的现实代码:
ZippedArray.map(function(x){
if(x[0].indexOf(name) >= 0)
{
MatchesNames.push(x[0]);
MatchesIds.push(x[1]);
}
});
我想要这个输出:
MatchesNames = MatchesNames.slice(0,2);
MatchesIds = MatchesIds.slice(0,2);
如何限制.map()
?我想要break;
2次之后的东西。
根据您的评论,您似乎要循环播放,直到在if
条件中找到两个匹配项为止。
在这种情况下,您可以使用.some()
,这将在您返回true
(或任何真实值)后立即终止循环。
ZippedArray.some(function(x){
if(x[0].indexOf(name) >= 0)
{
MatchesNames.push(x[0]);
MatchesIds.push(x[1]);
}
return MatchesNames.length == 2; // Breaks when this returns `true`
});
本示例假定MatchesNames
在调用之前该字段为空.some()
。
如果数组中可能还有其他项目,而您最多只想再增加两个,则可以保留一个计数。
var found = 0;
ZippedArray.some(function(x){
if(x[0].indexOf(name) >= 0)
{
MatchesNames.push(x[0]);
MatchesIds.push(x[1]);
found++;
}
return found == 2;
});
如果要使用传统for
循环,请执行以下操作:
var found = 0;
for (var i = 0; i < ZippedArray.length; i++) {
var x = ZippedArray[i];
if(x[0].indexOf(name) >= 0)
{
MatchesNames.push(x[0]);
MatchesIds.push(x[1]);
found++;
}
if (found == 2) {
break;
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句