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

如何删除指定Module对象并按顺序重命名剩余Module

问题:删除指定模块对象并重新排序命名

现有模块对象

我获取到了如下模块对象,想要删除指定的模块(比如module_1),并将剩余的module_2、module_3……重新命名为module_1、module_2……,保持顺序递增。

{
  "module_1": {
    "modulename": "maths",
    "moduletypes": "mandatory",
    "moduleid": "88",
    "moduleaim": "MODULE AIM",
    "learningobjectives": "LEARNING OBJECTIVES",
    "assessmentcriteria": "SSESSMENT CRITERIA",
    "scenario": "sfgsfgsdfg",
    "tasknumber": 2,
    "taskarea": [
      "<p>taskarea1sdfgsdfsfgagagasdasdf</p>",
      "<p>asdasdasd</p>"
    ],
    "librarylinks": [
      "asdasdsa",
      "asdasd"
    ],
    "studylinks": [
      "asdasd",
      "asdasd"
    ],
    "videoslinks": [
      "asdasdfsdfsdfsdfsdfsdfsdf",
      "asdasdfsfsdfsf"
    ]
  },
  "module_2": {
    "modulename": "asasdasd",
    "moduletypes": "optional",
    "moduleid": "23443",
    "moduleaim": "asdasgdfg",
    "learningobjectives": "dgdg",
    "assessmentcriteria": "dfgdg",
    "scenario": "dgdgdg",
    "tasknumber": 1,
    "taskarea": [
      "dgdfgdfg"
    ],
    "librarylinks": [
      "dfgdfgdfg"
    ],
    "studylinks": [
      "dgdfgdfg"
    ],
    "videoslinks": [
      "dgdfgdfg",
      "sdfasdfasf"
    ]
  },
  "module_3": {
    "modulename": "science",
    "moduletypes": "optional",
    "moduleid": "3234",
    "moduleaim": "sadfsdfgsdaf",
    "learningobjectives": "asfdsadf",
    "assessmentcriteria": "asdfadsf",
    "scenario": "asdfasdfasf",
    "tasknumber": 1,
    "taskarea": [
      "adfafads"
    ],
    "librarylinks": [
      "afdasfasdf"
    ],
    "studylinks": [
      "asdfasafs"
    ],
    "videoslinks": [
      "afdaafd",
      "asfdasfasf"
    ]
  }
}

前端代码

HTML 删除按钮

<button
  class="btn rounded-pill btn-primary remove_module remove_module_button"
  data-id="5"
  data-modulename="module_1"
  type="button"
>
  Remove Module <i class="bx bx-x-circle ml-1"></i>
</button>

jQuery 点击逻辑

$(document).on('click', '.remove_module', function() {
    var id = $(this).data('id');
    var modulename = $(this).data('modulename');
    var ok = confirm("Are you sure, you want to delete this Module?");
    if (ok) {
        $.ajax({
            method: "GET",
            url: "deletemodule",
            data: {
                id: id,
                modulename: modulename
            },
            success: function(data) {
                if (data == 1) {
                    alert("Course Deleted Successfully!");
                    window.location.reload();
                }
            }
        });
    }
});

后端PHP代码(Laravel)

目前只完成了数据获取部分:

public function deleteModule(Request $request){
    $id =  $request->id;
    $modulename =  $request->modulename;
    $data = Course::where('id', $id)->get();
    $modueldata = $data[0]->modules; // 从modules字段获取模块数据(JSON格式)
}

需求与期望结果

需要实现:删除用户指定的模块对象,将剩余模块按顺序重新命名为module_1、module_2……

处理后的期望结果:

{
    "module_1": {  
        "modulename": "asasdasd",
        "moduletypes": "optional",
        "moduleid": "23443",
        "moduleaim": "asdasgdfg",
        "learningobjectives": "dgdg",
        "assessmentcriteria": "dfgdg",
        "scenario": "dgdgdg",
        "tasknumber": 1,
        "taskarea": [
            "dgdfgdfg"
        ],
        "librarylinks": [
            "dfgdfgdfg"
        ],
        "studylinks": [
            "dgdfgdfg"
        ],
        "videoslinks": [
            "dgdfgdfg",
            "sdfasdfasf"
        ]
    },
    "module_2": { 
        "modulename": "science",
        "moduletypes": "optional",
        "moduleid": "3234",
        "moduleaim": "sadfsdfgsdaf",
        "learningobjectives": "asfdsadf",
        "assessmentcriteria": "asdfadsf",
        "scenario": "asdfasdfasf",
        "tasknumber": 1,
        "taskarea": [
            "adfafads"
        ],
        "librarylinks": [
            "afdasfasdf"
        ],
        "studylinks": [
            "asdfasafs"
        ],
        "videoslinks": [
            "afdaafd",
            "asfdasfasf"
        ]
    }
}

解决方案

核心逻辑在后端PHP中完成,步骤如下:

  1. 将JSON格式的模块数据解码为数组
  2. 删除指定的模块键
  3. 提取剩余模块的所有值,重新按module_1、module_2的规则生成新键
  4. 将新数组编码为JSON,更新回Course模型
  5. 返回成功响应

修改后的PHP方法代码:

public function deleteModule(Request $request){
    $id = $request->id;
    $modulename = $request->modulename;
    
    // 查找对应课程,使用first()而非get(),直接获取单条记录
    $course = Course::where('id', $id)->first();
    if(!$course){
        return response()->json(0);
    }
    
    // 解码模块数据为数组
    $modules = json_decode($course->modules, true);
    
    // 删除指定模块
    if(isset($modules[$modulename])){
        unset($modules[$modulename]);
    }
    
    // 重新生成有序的模块键名
    $newModules = [];
    $index = 1;
    foreach($modules as $module){
        $newModules["module_{$index}"] = $module;
        $index++;
    }
    
    // 重新编码为JSON并保存
    $course->modules = json_encode($newModules);
    $course->save();
    
    // 返回成功标识
    return response()->json(1);
}

补充说明

  • 使用first()替代get(),避免额外的数组索引操作,更高效
  • 增加了课程存在性判断,避免空指针错误
  • 遍历剩余模块时按原顺序重新命名,保证排序正确
  • 最后返回JSON格式的响应(原代码直接返回1,改为json响应更规范,前端逻辑无需修改)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 07:31:06