我有这些数组和变量:
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:无法读取属性&#39; 0&#39;未定义的{第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;
之类的东西。
答案 0 :(得分:4)
根据您的评论,您似乎想要循环,直到您在70px
条件下找到两个匹配项。
在这种情况下,您可以使用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
答案 1 :(得分:3)
您发布的代码不会引发错误。
但是当你限制迭代数组的循环次数时,你应该为索引添加一个范围检查:
for (var c = 0; c < 2 && c < arr.length; c++) {
// or alternatively
for (var c = 0, l = Math.min(2, arr.length); c < l; c++) {