过滤纤细 typescript 中的对象数组

llmtgqce  于 2023-02-10  发布在  TypeScript
关注(0)|答案(1)|浏览(98)

我想检查某个用户名是否在用户对象数组中。
我正在使用fastapi获取投票者列表。一个用户的用户名值为{"username": "mickey"}。我正在使用persistent_storage将当前用户存储为$username

<script>
let question = {answers:[], voter:[], content: ''}

function get_question() {
     fastapi("get", "/api/question/detail/" + question_id, {}, (json) => {         
     question = json
 })}
</script>

{#if question.voter.forEach(v => v.username).includes($username) }

然而,question.voter.username.forEach(v => v.username)总是返回undefined,我有点搞不清python和javascript的本质。
还是我的方法错了?我应该创建另一个快速API调用吗?

cld4siwp

cld4siwp1#

假设$username保存一个字符串值,则检查可能是

{#if question.voter.some(v => v.username === $username)}

也可能是

{#if question.voter.map(v => v.username).includes($username)}

但我认为.some()除了更短之外,还更高效,因为它只迭代数组一次,并且在找到结果后立即停止
请注意,注解中提到的当前解决方案使用String.prototype.includes

{#if question.voter.filter(v => v.username.includes($username)).length == 1}

容易出错,因为这将匹配包含当前用户名的较长用户名。例如,当存在用户对象{username: 'foobar'}$username = 'foo'时,这将在没有{username: foo}时匹配。可以调整为

{#if question.voter.filter(v => v.username === $username).length == 1}

但相比之下这不是首选

相关问题