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

JS数组中批量删除前缀匹配且对应value存在true的所有对象

实现方案

核心思路

  • 第一次遍历数组,收集所有fieldValue为true的条目对应的前缀,存入黑名单集合
  • 第二次遍历数组,过滤掉所有前缀在黑名单内的条目即可

完整代码实现

const data = [{
    field_name_key: "Recive_IsViaEmail",
    fieldValue: false
  },
  {
    field_name_key: "Recive_IsViaSMS",
    fieldValue: false
  },
  {
    field_name_key: "Sender_IsViaEmail",
    fieldValue: false
  },
  {
    field_name_key: "Sender_IsViaSMS",
    fieldValue: true
  }
]

// 封装提取前缀的公共方法:取字段名最后一个下划线之前的内容作为前缀,兼容无下划线的字段名
const getFieldPrefix = (fieldKey) => {
  const lastUnderlineIdx = fieldKey.lastIndexOf('_')
  return lastUnderlineIdx === -1 ? fieldKey : fieldKey.slice(0, lastUnderlineIdx)
}

// 构建需要删除的前缀黑名单
const invalidPrefixSet = new Set()
for (const item of data) {
  if (item.fieldValue) {
    invalidPrefixSet.add(getFieldPrefix(item.field_name_key))
  }
}

// 过滤得到最终结果
const filteredData = data.filter(item => !invalidPrefixSet.has(getFieldPrefix(item.field_name_key)))

console.log(filteredData)

运行结果

上述代码运行后得到的filteredData和预期结果完全一致:

[
  { field_name_key: 'Recive_IsViaEmail', fieldValue: false },
  { field_name_key: 'Recive_IsViaSMS', fieldValue: false }
]

补充说明

如果你的字段前缀规则不是取最后一个下划线之前的内容,只需要修改getFieldPrefix方法里的前缀提取逻辑即可,无需改动整体流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:06:03