首页 > 解决方案 > array.find 返回多个结果

问题描述

我正在尝试将单个结果与一组项目(具体来说是 Api)进行比较。它不是.find()返回与 匹配的第一个Details.title结果,而是返回所有结果。我正在使用 EJS:

<% 
Movies.find(element => {
    if(Details.title === element.text){
        console.log(element)
    }
})
%>

Movies有项目数组(api)。我循环Movies试图获得与 匹配的单个结果Details.title,但它给了我所有匹配的结果。

我能做些什么来防止这种情况发生?

标签: javascriptarraysejs

解决方案


您并没有真正find按照应有的方式使用。

您使用它的方式与您使用的方式没有什么不同forEach:您决定if将在回调中输出什么,并且不指示任何停止迭代的内容:因此您将获得所有匹配项的输出。

相反,当你有匹配时,你应该在回调中返回一个真实的值,而不是在那里输出任何东西。输出应基于find 返回的内容:

console.log(Movies.find(element => Details.title === element.text));

特别注意 : 的位置,console.log它将find返回的内容作为参数。

比较这些可运行片段的差异:

坏的:

let Movies = [
    { text: "Arena", year: 1989 },
    { text: "Arena", year: 2011 },
    { text: "Asylum", year: 1972 },
    { text: "Asylum", year: 2005 },
];
let Details = { title: "Asylum" };

Movies.find(element => {
    if (Details.title === element.text) {
        console.log(element);
    }
});

好的:

let Movies = [
    { text: "Arena", year: 1989 },
    { text: "Arena", year: 2011 },
    { text: "Asylum", year: 1972 },
    { text: "Asylum", year: 2005 },
];
let Details = { title: "Asylum" };

console.log(Movies.find(element => Details.title === element.text));


推荐阅读