gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 07:35:18 24 4
gpt4 key购买 nike

我有这些数组和变量:

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');
}
}

但是 ^ 不起作用,它给了我这个错误:

Uncaught TypeError: Cannot read property '0' of undefined {in line 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`
});

此示例假定在您调用 .some() 之前 MatchesNames 为空。


如果数组中可能还有其他项,而你只想最多再插入两个,那么你可以保持计数。

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;
}
}

关于javascript - 如何使用 for() 实现 .map()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35543361/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com