【问题标题】:Is there a simpler way to replace nested property? [closed]有没有更简单的方法来替换嵌套属性? [关闭]
【发布时间】:2020-07-02 16:46:29
【问题描述】:

在一次采访中,我有一个有趣的 javascript-task:

给定代码:

const testStr = "bar.baz.foo:111222",
      testObj = {
        bar: {
          baz: {
            foo: 333444,
            foo2: 674654
          },
          boo: {
            faa: 11
          }
        },
        fee: 333
      };

function replaceInObj(obj, str) {
  // your code
}

编写replaceInObj函数的实现

  1. 我不被允许使用 3rd-party 库。
  2. 我完成了任务,但对我的解决方案不满意。
  3. 我正在为复杂的实现而苦苦挣扎。
  4. 同时我自己也找不到其他解决方案。

我对@9​​87654325@函数的实现

const testStr = 'bar.baz.foo:111222';
const testObj = {
  bar: {
    baz: {
      foo: 333444,
      foo2: 674654,
    },
    boo: {
      faa: 11,
    },
  },
  fee: 333,
};

console.log('[before] testObj.bar.baz =', testObj.bar.baz);

// run
replaceInObj(testObj, testStr);

console.log('[after] testObj.bar.baz =', testObj.bar.baz);

function replaceInObj(obj, str) {
  const [path, valueToChange] = str.split(':');

  path.split('.').reduce((acc, prop, index, arr) => {
    const isLastProp = arr.length === index + 1;
    if (isLastProp) {
      acc[prop] = valueToChange;
    }

    return acc[prop];
  }, obj);
}

你将如何实现函数replaceInObj

  • 我希望有更简单的实现。
  • 如果您能分享您的解决方案,我将不胜感激

【问题讨论】:

  • 关于从最佳实践、效率、可读性等方面改进工作代码的问题...更适合Code Review。任何人想要怎么做,见仁见智。
  • 哦,谢谢!不知道甚至存在这样的平台 - 到时候将其发布到代码审查!
  • "你将如何实现这个功能?" - 用正确的关键字搜索一下,你会发现成千上万的替代解决方案来完成这个非常常见的任务,包括@987654322 @

标签: javascript testing task


【解决方案1】:

我认为我发现解决方案更加简洁易懂: https://codereview.stackexchange.com/a/240907/227075

该解决方案适合我的任务

const testStr = 'bar.baz.foo:111222';
const testObj = {
  bar: {
    baz: {
      foo: '333444',
    },
  },
};

console.log('[before] testObj.bar.baz =', testObj.bar.baz);

// run
replaceInObj(testObj, testStr);

console.log('[after] testObj.bar.baz =', testObj.bar.baz);

function replaceInObj(obj, str) {
  const [path, valueToChange] = str.split(':');
  const properties = path.split('.');
  const lastProperty = properties.pop();
  const lastObject = properties.reduce((a, prop) => a[prop], obj);
  lastObject[lastProperty] = valueToChange;
}

【讨论】:

    猜你喜欢
    • 2021-11-08
    • 2020-03-19
    • 2020-11-15
    • 2023-03-22
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 2014-01-18
    • 2010-12-25
    相关资源
    最近更新 更多