Skip to content

实现:setObjectValue(obj: object, keys: string[], value: any) 方法, 支持安全设置对象的值

Posted on:2024年8月14日 at 19:59

要实现一个 setObjectValue 方法,能够安全地设置对象的值,并支持通过键路径访问和设置值,可以按照以下步骤进行:

功能说明

实现代码

function setObjectValue(obj: object, keys: string[], value: any): void {
  if (!keys.length) return;

  // 遍历 keys 除了最后一个键
  let current = obj;
  for (let i = 0; i < keys.length - 1; i++) {
    const key = keys[i];

    // 如果当前路径的对象不存在,则创建它
    if (!(key in current)) {
      // 使用空对象作为默认值
      (current as any)[key] = {};
    }

    // 移动到下一个嵌套的对象
    current = (current as any)[key];
  }

  // 设置最后一个键的值
  const lastKey = keys[keys.length - 1];
  (current as any)[lastKey] = value;
}

// 示例用法
const obj = {};
setObjectValue(obj, ["a", "b", "c"], 42);
console.log(obj); // 输出: { a: { b: { c: 42 } } }

说明

  1. 初始化检查: 如果 keys 数组为空,则直接返回,不执行任何操作。
  2. 遍历键路径: 遍历 keys 除了最后一个键。对于每个键,如果当前对象中不存在这个键,则创建一个新的对象。这样可以确保嵌套路径的所有中间对象都存在。
  3. 设置值: 在最后一个键的位置设置目标值。

注意事项

这种实现方式可以有效地处理复杂的嵌套路径,并保证在设置值之前路径中的所有部分都被正确创建。

原文转自:https://fe.ecool.fun/topic/ea2fac70-cd8c-47ad-997b-331cac76af38