Реализация Лода sh Инверт - PullRequest
0 голосов
/ 24 апреля 2020

Я работаю над проблемой, которая требует от меня реализации метода .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'}

Я делаю что-то ужасно неправильно, но не могу понять, что ... Может кто-нибудь помочь?

Ответы [ 3 ]

2 голосов
/ 24 апреля 2020

Вместо присвоения нового значения для newObject каждые l oop, попробуйте просто добавить новый ключ к текущему объекту:

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

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

    return newObject;
  }
};
1 голос
/ 24 апреля 2020

Преобразовать в массив пар [ключ, значение], используя Object.entries(), затем отобразить и перевернуть пары в [значение, ключ]. Преобразовать обратно в объект, используя 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);
1 голос
/ 24 апреля 2020

Решите это, используя reduce.

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

console.log(res);
...