如何通过输入元素(原始js)实时检查用户是否存在于JavaScript对象中

How to check in real time if a user exists in a JavaScript object through an input element (raw js)

我对 JS 很陌生,我正在尝试实时检查 JavaScript 对象中是否存在用户或任何值,目标是在 Firebase 中实现它以防止用户注册如果该用户名已被占用,但我首先在本地进行,因为我正在学习。这是我到目前为止所拥有的。

let input = document.getElementById('input')
let btn = document.getElementById('btn')
btn.disabled = false

let users = [
    {
        uname: "mark"
    },
    {
        uname: "sarah"
    },
    {
    ...others uname
    }
]

input.addEventListener('input', () => {

    input.value = input.value.replace(regex, "")
    check(input.value)
    
})

function check(val) {

    users.forEach((item) => {
        let uname = item.uname

        if (uname.indexOf(val) > -1 && uname === val) {
            console.log('That user name has been taken')
            btn.disabled = true
        } else {
            console.log('Ok')
            btn.disabled = false
        }
    })
}

问题是,当我输入输入元素时,我同时触发了 if 和 else,而 while (val) 匹配了一些 key/value 对,而其他对则不会,然后我可以使用无论我输入什么用户名,这都不是我想要的。

我该如何解决这个问题?谢谢

您没有检查是否已找到用户名。

function isUsernameAvailable (val) {
    for (var i = 0; i < users.length; i++) {
        var uname = users[i].name;

        if (uname === val) {
            console.log('That user name has been taken')
            btn.disabled = true

            return false; // the username is taken, we can stop checking
        }
    }

    console.log('Ok')
    btn.disabled = false

    return true;
}

此外,forEach 不会让您提前退出循环,并且您不需要在找到匹配项后检查每个用户(如果找到匹配项)。