首页 > 解决方案 > 实现 Lodash Invert

问题描述

我正在处理一个需要我自己实现 .invert() 方法的挑战。以下是我的解决方案,但预期结果与返回的实际结果不匹配。请参阅下面的第二个块。

实现 .invert() 方法:

const _ = {
  invert(object) {
    let newObject = {};
    for (let key in object) {
      const originalValue = object[key]
      newObject = {
        originalValue: key
      }
    }
    return newObject;
  }
};

用下面的代码测试:

var obj1 = { 'a': '1', 'c': '1', 'b': '2' };
console.log(_.invert(obj1));

我希望看到下面的返回:

{ '1': 'c', '2': 'b' }

实际返回值如下:

{ originalValue : 'c'}

我做错了什么,但不知道是什么...有人可以帮忙吗?

标签: javascriptobjectlodash

解决方案


不要为newObject每个循环分配一个新值,而是尝试向当前对象添加一个新键:

const _ = {
  invert (object) {
    let newObject = {};

    for (let key in object) {
      const originalValue = object[key];
      newObject[originalValue] = key;
    }
    
    return newObject;
  }
};

编辑:由于这已被接受为答案,我想提一下,就个人而言,我更喜欢Ori Drori提出的解决方案。

也就是说,这个答案更接近问题作者的原始实现,我认为这是理解必要更改的更好方法。但是,如果您只是为了代码来回答这个问题,我会邀请您尝试理解和使用 Ori Drori 的版本。


推荐阅读