我试图在读取数组时运行一个函数,而不是对每个元素运行该函数,我目前正在使用 forEach
,我想让脚本读取整个数组,然后传递一个函数。
我想说的是:
data.forEach(movie => {
// Log each movie's title
//console.log(movie.title);
// Check if the userWord matches
if (movie.title.toUpperCase().includes(userWord.toUpperCase())) {
alert("YES");
} else {
alert("NO").
}
});
假设我的数组是:array = ["Aa", "Ba", "Ca", "Da"];
如果用户输入:a,那么脚本会 alert("YES")
四次,我想让它在最后只提醒一次迭代的。
同样的例子,如果用户输入:B,那么脚本会先alert("NO")
一次,然后alert("YES ")
,然后 alert("YES")
2 次,最后我只想让它 alert("YES")
一次。
最后,如果用户输入:Ferrari,那么脚本将 alert("NO")
四次,我只想让它 alert( "NO")
最后。
我试图在这里说得很清楚,这就是为什么会发生这三种“情况”。
最后,我想知道是否有一种方法与 forEach
或常见的 for
相反。在读取整个数组后才执行函数的东西。
最佳答案
- 将警报更改为 bool 变量
- 删除其他(它只会覆盖任何匹配项)
- if bool 语句在循环外执行 Action
如果您想要结果列表,您应该将名称存储在数组中并在循环之外 - 打印。
见下文:
非循环方法:
data = ["test","hello", "hello1"];
search = "lo";
const matches = data.filter(movie => movie.includes(search));
alert(matches) //array of only matches - only has hello and hello 1
我不知道循环是否有性能提升......我想你可以在大型数据集上进行并排比较
循环方法:
var matches = "";
data.forEach(movie => {
// Check if the userWord matches
if (movie.title.toUpperCase().includes(userWord.toUpperCase())) {
matches += movie.title + "<br> ";
}
});
if (matches.length > 0)
{
document.getElementById("results").innerHTML = matches;
} else {
alert("No match found");
}
您会在第一个循环中看到更多定制,但我认为首先过滤数据是可行的方法。
关于javascript - 如何仅在读取整个数组而不是每个元素后才传递函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52247179/