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

如何用JavaScript遍历嵌套对象并为p1、p2内部值应用自定义加密函数?

解决嵌套对象p1/p2属性加密的正确实现

首先要明确核心需求:生成全新的加密对象(不修改原始数据),仅对p1和p2下的所有属性值应用加密函数,其他属性保留原样。以下分两种场景给出实现方案:

场景1:p1/p2为单层对象(无深层嵌套)

如果p1和p2都是单层键值对,无需递归,直接遍历属性即可:

// 假设你的加密函数已实现
function encryption(value) {
  // 示例:以反转字符串模拟加密逻辑
  return value.split('').reverse().join('');
}

// 原始credentials对象结构示例
const credentials = {
  userId: "u_001",
  p1: {
    username: "charlie",
    password: "charlie_789"
  },
  p2: {
    apiKey: "key_abc123",
    secret: "sec_xyz456"
  },
  remark: "无需加密"
};

// 生成加密后的新对象
const encryptedCredentials = {
  ...credentials, // 复制不需要加密的顶层属性
  p1: Object.fromEntries(
    Object.entries(credentials.p1).map(([key, val]) => [key, encryption(val)])
  ),
  p2: Object.fromEntries(
    Object.entries(credentials.p2).map(([key, val]) => [key, encryption(val)])
  )
};

场景2:p1/p2包含深层嵌套对象

如果p1或p2内部还有多层子对象,需要用递归遍历所有层级的属性值:

function encryption(value) {
  return value.split('').reverse().join('');
}

// 递归处理嵌套对象的加密逻辑
function encryptNestedObject(obj) {
  // 非对象类型直接加密(注意处理null,typeof null === 'object')
  if (typeof obj !== 'object' || obj === null) {
    return encryption(obj);
  }
  // 数组类型递归处理每个元素
  if (Array.isArray(obj)) {
    return obj.map(item => encryptNestedObject(item));
  }
  // 对象类型递归处理每个属性
  return Object.fromEntries(
    Object.entries(obj).map(([key, val]) => [key, encryptNestedObject(val)])
  );
}

// 含深层嵌套的原始对象示例
const credentials = {
  userId: "u_002",
  p1: {
    userInfo: {
      name: "david",
      email: "david@test.com"
    },
    loginPwd: "david_1234"
  },
  p2: {
    auth: {
      token: "token_789",
      expireTime: "2026-06-01"
    }
  }
};

const encryptedCredentials = {
  ...credentials,
  p1: encryptNestedObject(credentials.p1),
  p2: encryptNestedObject(credentials.p2)
};

常见错误排查

  • 直接修改原对象:如果你的代码直接操作credentials.p1的属性,会污染原始数据,必须通过解构、Object.fromEntries等方式生成新对象。
  • 未处理深层嵌套:单层遍历只能处理p1/p2的顶层属性,深层子对象的属性不会被加密,此时必须用递归遍历。
  • 忽略非字符串类型:如果属性值是数字、布尔值等,要确保加密函数能兼容处理,或在递归逻辑中增加类型判断后再执行加密。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:00:59