You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测脚本是否尝试添加重复ID?日志记录器开发求助

问题:日志记录器无法检测重复ID

我正在开发一款记录用户ID与名称的日志记录器,但无法检测脚本是否尝试添加重复ID。我尝试用id.includes(user._id)判断,但这个if条件始终不触发,相关代码如下:

let id = [];
MPP.client.on('participant added', user => {
    if (id.includes(user._id))
        return console.log(
            `%c - joined, seen ${user._id}, n: ${user.name}`,
            'color: red;'
        );
    id.push({ id: user._id, n: user.name, action: 'joined' });
    console.log(
        `%c + joined, added ${user._id} to list, n: ${user.name}`,
        'color: lime;'
    );
});
MPP.client.on('participant removed', user => {
    if (id.includes(user._id))
        return console.log(
            `%c - left, seen ${user._id}, n: ${user.name}`,
            'color: red;'
        );
    id.push({ id: user._id, n: user.name, action: 'left' });
    console.log(
        `%c + left, added ${user._id} to list, n: ${user.name}`,
        'color: lime;'
    );
});

问题根源

你的id数组里存储的是对象(比如{ id: user._id, n: user.name, action: 'joined' }),但includes(user._id)是在数组里查找是否存在等于user._id这个字符串的元素。数组里全是对象,自然永远匹配不到,所以if条件永远不成立,导致重复ID不断被添加。

修复方案

改用Array.some()方法遍历数组,检查是否已有对象的id属性等于当前user._id:

修改后的代码如下:

let id = [];
MPP.client.on('participant added', user => {
    // 检查数组中是否已有对应ID的对象
    const hasDuplicate = id.some(item => item.id === user._id);
    if (hasDuplicate)
        return console.log(
            `%c - joined, seen ${user._id}, n: ${user.name}`,
            'color: red;'
        );
    id.push({ id: user._id, n: user.name, action: 'joined' });
    console.log(
        `%c + joined, added ${user._id} to list, n: ${user.name}`,
        'color: lime;'
    );
});
MPP.client.on('participant removed', user => {
    const hasDuplicate = id.some(item => item.id === user._id);
    if (hasDuplicate)
        return console.log(
            `%c - left, seen ${user._id}, n: ${user.name}`,
            'color: red;'
        );
    id.push({ id: user._id, n: user.name, action: 'left' });
    console.log(
        `%c + left, added ${user._id} to list, n: ${user.name}`,
        'color: lime;'
    );
});

额外优化建议

如果需要频繁检查重复,用Map存储会比数组遍历效率更高,直接以ID为键存储用户信息:

const userLog = new Map();
MPP.client.on('participant added', user => {
    if (userLog.has(user._id))
        return console.log(
            `%c - joined, seen ${user._id}, n: ${user.name}`,
            'color: red;'
        );
    userLog.set(user._id, { n: user.name, action: 'joined' });
    console.log(
        `%c + joined, added ${user._id} to list, n: ${user.name}`,
        'color: lime;'
    );
});
// participant removed 事件同理修改

内容的提问来源于stack exchange,提问作者partialinvisibility

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 15:45:51