如何使用for()实现.map()?

时间:2016-02-21 23:13:13

标签: javascript jquery for-loop

我有这些数组和变量:

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;之类的东西。

2 个答案:

答案 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++) {