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

如何将对象数组中每个对象的指定属性设为false且不影响其他属性?

实现方案

给你几种实用的实现方式,根据你的需求选择就行:

1. 直接遍历修改原数组(新手友好,直观易懂)

这种方式直接修改原数组里的对象,逻辑清晰,适合刚接触JS的新手:

const combinations = [{rolledOnes: true, scoredOnes:false}, 
                      {rolledTwos: true, scoredTwos:false}];

// 遍历数组里的每个对象
combinations.forEach(obj => {
  // 遍历当前对象的所有属性
  for (const key in obj) {
    // 判断属性名是否以'rolled'开头
    if (key.startsWith('rolled')) {
      obj[key] = false;
    }
  }
});

2. 生成新数组(不修改原数据,函数式风格)

如果你不想改动原数组,想要生成一个全新的数组,这种方式更优雅,适合偏好函数式编程的场景:

const combinations = [{rolledOnes: true, scoredOnes:false}, 
                      {rolledTwos: true, scoredTwos:false}];

const updatedCombinations = combinations.map(obj => 
  // 将对象转成键值对数组,处理后再转回对象
  Object.fromEntries(
    Object.entries(obj).map(([key, value]) => 
      // 前缀为'rolled'的属性设为false,其他保持原样
      key.startsWith('rolled') ? [key, false] : [key, value]
    )
  )
);

3. 手动指定属性(适合属性数量少的场景)

如果你的rolledXXX属性数量不多,也可以直接手动赋值,但这种方式扩展性差,属性多了就很麻烦:

combinations.forEach(obj => {
  obj.rolledOnes = false;
  obj.rolledTwos = false;
  // 有更多rolled开头的属性就继续加
});

总结

  • 新手优先选第一种方式,逻辑简单,容易调试;
  • 要是需要保留原数组,第二种函数式的写法更合适;
  • 属性少的话第三种也能凑合用,但大规模数据还是前缀判断的方式更省心。

内容的提问来源于stack exchange,提问作者Anon-aq

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:35:17