You need to enable JavaScript to run this app. JavaScript中有没有更简洁的方式按条件替换指定对象的属性值?
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中有没有更简洁的方式按条件替换指定对象的属性值?

解决方案

原生JavaScript实现

修改原对象的写法

把需要转换的属性统一放到数组中批量遍历处理即可,代码如下:

// 列出所有需要转布尔值的属性名
const booleanFields = ['extraBed', 'accomodateChildren', 'allowPets', 'isPrepaymentRequired', 'provideDormitoryForDriver', 'GST']

// 批量处理
booleanFields.forEach(field => {
  // 等价于你原有逻辑:等于"No"返回false,其他值返回true
  fields[field] = fields[field] !== 'No'
})

不修改原对象,返回新对象的写法

const booleanFields = ['extraBed', 'accomodateChildren', 'allowPets', 'isPrepaymentRequired', 'provideDormitoryForDriver', 'GST']

const convertedFields = booleanFields.reduce((result, field) => {
  result[field] = result[field] !== 'No'
  return result
}, {...fields})

Lodash实现

修改原对象

const booleanFields = ['extraBed', 'accomodateChildren', 'allowPets', 'isPrepaymentRequired', 'provideDormitoryForDriver', 'GST']

_.forEach(booleanFields, field => {
  fields[field] = fields[field] !== 'No'
})

不修改原对象

const booleanFields = ['extraBed', 'accomodateChildren', 'allowPets', 'isPrepaymentRequired', 'provideDormitoryForDriver', 'GST']

const convertedFields = _.assign({}, fields, _.mapValues(_.pick(fields, booleanFields), val => val !== 'No'))

方案优势

  • 完全符合需求:仅处理指定的属性,不会遍历对象所有属性,也不需要解构
  • 符合DRY原则:后续需要新增/减少要转换的属性,只需要修改booleanFields数组即可,不需要重复写转换逻辑
  • 可灵活调整规则:如果后续规则调整为只有严格等于"Yes"才返回true,只需要把判断条件修改为val === 'Yes'即可,改动量极小

内容的提问来源于stack exchange,提问作者Nithin K Joy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 05:36:03