如何无需遍历即可判断answers数组中是否存在特定username发布的回答?
如何快速检查数组中是否存在特定用户名的回答
当然可以!你完全不用手动写循环逐个遍历数组,JavaScript自带的数组方法就能帮你高效实现这个需求。
你提到的answers是一个包含多个对象的数组,每个对象里嵌套了author对象(带username属性)。要检查是否存在某个特定用户名发布的回答,最适合的方法就是用**Array.prototype.some()**——它会遍历数组,只要找到第一个符合条件的元素就立刻返回true,不用遍历整个数组,效率很高。
具体实现代码
比如你要找用户名是"johndoe"的回答:
const targetUsername = "johndoe"; const hasUserAnswer = answers.some(answer => answer.author.username === targetUsername);
some()方法接收一个回调函数,数组里的每个answer对象会依次传入这个函数- 回调里我们判断当前
answer的author.username是否等于目标用户名 - 如果数组里有任何一个元素满足条件,
hasUserAnswer就会是true,否则为false
在EJS模板中使用
因为你提到用<%=answers%>输出数据,看起来是在EJS模板里使用,那可以直接把这个逻辑写到模板里:
<% const targetUser = "johndoe"; %> <% if (answers.some(ans => ans.author.username === targetUser)) { %> <p>存在用户<%= targetUser %>发布的回答</p> <% } else { %> <p>没有找到用户<%= targetUser %>的回答</p> <% } %>
补充说明
你之前想的arrays.contains("username")或者answers[author].username.contains("username")这种写法不太对,原因是:
answers是数组,不是单个对象,不能直接通过answers[author]访问属性contains()(现在标准里是includes())是字符串或数组的方法,不能直接用来检测对象的嵌套属性
用some()就完美解决了这个问题,既简洁又高效~
内容的提问来源于stack exchange,提问作者celipag
相关产品推荐
相关产品推荐

