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

如何在JavaScript中删除数组内用户输入的指定元素

问题核心原因

你当前代码无法实现按名称删除元素的核心问题是:Array.splice()方法的第一个入参要求是目标元素在数组中的数字索引,但你直接传入了用户输入的姓名字符串,无法定位到对应元素。

修复实现方案

你不需要手动写循环遍历,JS数组内置的indexOf()方法可以直接获取指定元素的索引,逻辑如下:

  • 接收到删除指令后,先调用arr.indexOf(name)查询目标姓名的索引
  • 若返回值不等于-1,说明元素存在,再调用splice()传入该索引执行删除
  • 若返回值等于-1,可以加个提示告诉用户数组中没有该姓名
修复后的完整代码
let arr = [];

for (let i = 0; i < Infinity; i++) {
    var command = prompt('请输入指令');
    var arrays = command.split(' ');

    var action = arrays[0]; // 原变量名index容易歧义,修改为action更符合语义
    var name = arrays[1];

    if (action == 'add') {
        arr.push(name);
        var res = arr.join(' ');
        console.log('当前数组:', res);
    } else if (action === 'delete' || action === 'del') {
        // 新增查找索引逻辑
        const targetIndex = arr.indexOf(name);
        if (targetIndex !== -1) {
            arr.splice(targetIndex, 1);
            console.log(`已删除${name},当前数组:`, arr);
        } else {
            console.log(`数组中不存在${name}`);
        }
    }
    if (action === 'stop') {
        break;
    }
}
console.log('最终数组:', arr);
手动遍历实现方案(如需自行写遍历逻辑可参考)

如果你不想使用内置的indexOf方法,手动遍历的实现如下:

else if (action === 'delete' || action === 'del') {
    let found = false;
    for (let j = 0; j < arr.length; j++) {
        if (arr[j] === name) {
            arr.splice(j, 1);
            found = true;
            console.log(`已删除${name},当前数组:`, arr);
            break; // 匹配到第一个目标就跳出循环,只删首个匹配项
        }
    }
    if (!found) {
        console.log(`数组中不存在${name}`);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:06:02