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

如何将对象所有键(含嵌套对象)统一设为true或false?

递归设置对象所有键的布尔值

要实现将对象(包括嵌套对象)的所有键统一设置为true或false,需要通过递归遍历处理每一层嵌套对象,而不是直接覆盖顶层的嵌套属性。

解决方案代码

首先定义一个递归函数,用来遍历并修改对象的所有属性:

function setAllBooleanValues(obj, targetValue) {
  Object.keys(obj).forEach(key => {
    const val = obj[key];
    // 仅处理非null的对象类型(排除null,因为typeof null === 'object')
    if (typeof val === 'object' && val !== null) {
      // 递归处理嵌套对象
      setAllBooleanValues(val, targetValue);
    } else {
      // 将当前属性设置为目标布尔值
      obj[key] = targetValue;
    }
  });
}

使用示例

const odba = {
  "all": false,
  "allA": false,
  "allB": false,
  "allC": {
    "allD": false,
    "allE": { "allF": true },
  }
};

// 将所有属性设置为false
setAllBooleanValues(odba, false);
console.log(odba);

运行后输出符合预期:

{
  all: false,
  allA: false,
  allB: false,
  allC: {
    allD: false,
    allE: { allF: false }
  }
}

你之前代码的问题分析

  1. 第一段代码:仅遍历了对象的顶层键,遇到嵌套对象(比如allC)时直接将其赋值为false,没有递归处理内部的allD、allE等键。
  2. 第二段代码:错误地判断typeof key === 'object'——key是字符串类型的属性名,永远不会是对象;应该判断的是obj[key]的类型。同时递归逻辑错误,没有正确指向嵌套对象的属性,导致无法处理深层结构。

补充:处理数组的情况

如果你的数据结构包含数组,只需在函数中增加数组判断,遍历数组元素处理:

function setAllBooleanValues(obj, targetValue) {
  if (Array.isArray(obj)) {
    obj.forEach(item => setAllBooleanValues(item, targetValue));
    return;
  }
  if (typeof obj === 'object' && obj !== null) {
    Object.keys(obj).forEach(key => setAllBooleanValues(obj[key], targetValue));
  } else {
    obj = targetValue;
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 13:05:27