实施Lodash反转

问题描述 投票:0回答:1

我正在做一个挑战,需要我自己实现.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'}

我做了一些非常错误的事情,但不知道是什么... ... 谁能帮帮我?

javascript object lodash
1个回答
2
投票

没有为 newObject 每一次循环,可以尝试在当前对象中添加一个新的键。

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

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

    return newObject;
  }
};

1
投票

解决这个问题的方法是 reduce.

var obj = { 'a': '1', 'c': '1', 'b': '2' };
const res = Object.entries(obj).reduce((a, [k, v]) => ({...a, [v]: k}), {});

console.log(res);

1
投票

转换为[key, value]对的数组,使用的是 Object.entries()然后将这些对映射和并翻转到[value,key]。使用 Object.fromEntries():

const obj = { 'a': '1', 'c': '1', 'b': '2' };

const result = Object.fromEntries(
  Object.entries(obj)
    .map(([k, v]) => [v, k])
)

console.log(result);
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.