javascript - 如何仅在读取整个数组而不是每个元素后才传递函数?

标签 javascript arrays foreach

我试图在读取数组时运行一个函数,而不是对每个元素运行该函数,我目前正在使用 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 相反。在读取整个数组后才执行函数的东西。

最佳答案

  1. 将警报更改为 bool 变量
  2. 删除其他(它只会覆盖任何匹配项)
  3. 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/

相关文章:

python - 将值插入不带索引的数组

Java 循环效率 ("for"与 "foreach")

javascript - 表单不会通过ajax提交

javascript - 如何获取 "untouched"窗口对象?

javascript - VueJS : Custom Socket. io 发射在触发时未得到处理

javascript - 在使用JavaScript点击表头查看正文之前将表体设置为隐藏

python - 为什么我需要指定此列表的大小,否则它会给出列表索引超出范围错误

java - 在我的 Java 数组分类代码中找不到问题

java - 使用 for-each 遍历 createSQLQuery 的结果

java - java中的对象不断更新循环对象