如何将对象数组中每个对象的指定属性设为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
相关产品推荐
相关产品推荐

