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

JavaScript二维数组删除成员后添加提示已存在的问题解决

解决删除成员后仍提示已存在的问题

删除成员操作执行后,尝试添加同名新成员时系统仍提示“该成员已存在”,但实际上已从memberGroup中删除了对应成员。


相关代码片段

删除成员代码

var memberName = input.question("Please enter member's name: ");
memberName = memberName.substring(0, 1).toUpperCase() + memberName.substring(1).toLowerCase();
subMemberGroups();
if (subMemberGroup.includes(memberName)) {
    const memberGroupIndex = memberGroup.findIndex((e) => e.name === memberName)
    if (memberGroupIndex !== -1) {
        memberGroup.splice(memberGroupIndex, 1); // if exists remove it
        console.log("Member deleted!\n");
    } else {
        console.log("Member does not exist.\n");
    }
} 
else {
    console.log("Member does not exist.\n");
}
choices();

添加成员代码

while (true) {
    var memberName = input.question("Please enter member's name: ");
    memberName = memberName.substring(0, 1).toUpperCase() + memberName.substring(1).toLowerCase();
    subMemberGroups();
    if (subMemberGroup.includes(memberName)) {
        console.log ("\nMember's name exists in database. Please enter a new name.");
    }
    else {
        var memberDOB = input.question("Please enter member's date of birth: ");
        var memberDJ = input.question("Please enter member's date joined: ");
        var userNew = new Member (memberName, 'Ruby', memberDJ, memberDOB, 0);
        memberGroup.push(userNew);
        break;
    }
}

subMemberGroups函数

function subMemberGroups() {
    for (var i = 0; i < memberGroup.length; i++) {
        subMemberGroup.push(memberGroup[i]["name"]);
    }
}

初始化代码

memberGroup = [userJohn, userLemuel];
subMemberGroup = ['John', 'Samuel'];
var userJohn = ['John', '20'];
var userLemuel = ['Lemuel', '22'];
var userJohn = new Member ['John', '24'];

问题原因及修复方案

核心问题

subMemberGroups函数每次调用时,只会往subMemberGroup数组里追加成员名字,不会清空之前的内容。删除成员后,memberGroup里的对应项被移除,但subMemberGroup中仍保留着已删除的名字,导致添加成员时判断错误。

另外初始化代码存在变量声明顺序颠倒、构造函数调用错误(new Member ['John', '24']应为new Member('John', ...))、重复声明变量的问题,这些也会导致数据混乱。

修复步骤

  1. 修复subMemberGroups函数,每次调用前清空数组
function subMemberGroups() {
    // 先清空旧数据,再重新生成最新名字列表
    subMemberGroup = [];
    for (var i = 0; i < memberGroup.length; i++) {
        subMemberGroup.push(memberGroup[i].name);
    }
}

这样每次调用都会基于最新的memberGroup生成纯净的名字列表,不会残留旧数据。

  1. 修正初始化代码的错误
// 先声明并初始化成员实例
var userJohn = new Member('John', 'Ruby', '2023-01-01', '1999-01-01', 20);
var userLemuel = new Member('Lemuel', 'Ruby', '2023-02-01', '2000-02-01', 22);
// 初始化主数组和名字数组
memberGroup = [userJohn, userLemuel];
subMemberGroup = [];
// 首次生成名字列表
subMemberGroups();
  • 调整变量声明顺序,避免引用未定义的变量
  • 修正构造函数调用方式,使用括号传递参数
  • 初始化subMemberGroup为空数组,通过subMemberGroups()生成正确的初始名字列表
  1. 优化删除逻辑(可选)
    删除时可以直接根据memberGroupIndex判断,无需先查subMemberGroup,减少冗余判断:
var memberName = input.question("Please enter member's name: ");
memberName = memberName.substring(0, 1).toUpperCase() + memberName.substring(1).toLowerCase();
const memberGroupIndex = memberGroup.findIndex((e) => e.name === memberName);
if (memberGroupIndex !== -1) {
    memberGroup.splice(memberGroupIndex, 1);
    // 删除后立即更新名字列表
    subMemberGroups();
    console.log("Member deleted!\n");
} else {
    console.log("Member does not exist.\n");
}
choices();

这样删除后直接更新subMemberGroup,确保数据一致性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 01:06:21