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

JavaScript中对比对象数组与值数组 补全对象数组缺失项

实现方法

核心逻辑分两步走:

  • 先提取worksheet中已经存在的所有学生姓名,用Set存储以提升存在性判断的效率
  • 遍历data.student_names全量名单,把不在已存在名单里的学生按要求构造新对象,追加到worksheet末尾,原有记录的顺序、内容都不会改动

注意:你提供的示例代码里Test 3对应的对象存在语法错误,多写了一个冗余的"file"字符串,运行前需要先修正这个笔误。

直接修改原数组的实现

// 修正语法错误后的初始数据
var worksheet = [
  {"student_name": "Test 1", "file": "some_file_name.txt"}, 
  {"student_name": "Test 3", "file": "some_file_name.txt"}
]
var data = {"student_names": ["Test 1", "Test 2", "Test 3", "Test 4"]}

// 提取已存在的学生姓名集合
var existingStudentNames = new Set(worksheet.map(item => item.student_name))

// 遍历补全缺失记录
data.student_names.forEach(function(name) {
  if (!existingStudentNames.has(name)) {
    worksheet.push({
      student_name: name,
      file: ""
    })
  }
})

运行后worksheet的输出和你给出的预期结果完全一致:原有Test1、Test3的记录保持不变,Test2、Test4按名单顺序追加到数组末尾,file属性值为空字符串。

不修改原数组的实现

如果你需要保留原始worksheet不被改动,可以用浅拷贝生成新数组:

var existingStudentNames = new Set(worksheet.map(item => item.student_name))
var newWorksheet = [
  // 先放入原有所有记录
  ...worksheet,
  // 拼接过滤出的缺失学生记录
  ...data.student_names
    .filter(name => !existingStudentNames.has(name))
    .map(name => ({student_name: name, file: ""}))
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:06:25