Как поменять ключ и значение в карте Javascript - PullRequest
0 голосов
/ 30 марта 2019

У меня есть карта ES6:

Map(6) {"Coratia" => 1, "Korea" =>, "Norway" => 2, "Munich" => 1, "Austrlia" => 1, ...}

Я бы хотел поменять местами ключ и значения, чтобы это было так:

Map(6) {1 => "Coratia", 1 => "Korea", 2 => "Norway", 1 => "Munich", 1 => "Australia", ...}

Ответы [ 2 ]

0 голосов
/ 30 марта 2019

ES6 Карта при преобразовании в массив выглядит так:

 [[key, value], [key, value], [key, value],...]

Двумерный массив.

Демо-план

  • Предполагая, что у нас есть Карта с ключами и значениями, создайте новую пустую Карту.

  • Итерация по всей карте с помощью for...of loop

  • На каждой итерации .get() ключ / значение затем назначают значение в качестве ключа и ключ в качестве значения для пустой карты.

  • Консоль не показывает себя обычными средствами, чтобы отобразить ее содержимое, она должна перебирать каждую пару ключ / значение и регистрировать их.

let x2D = new Map([
  ['a', 1],
  ['b', 2],
  ['c', 3],
  ['d', 4],
  ['e', 5]
]);

let d2X = new Map();

for (let [key, value] of x2D) {
  let v = x2D.get(key);
  d2X.set(v, key);
}

for (let [k, v] of d2X) {
  console.log('[' + k + ', ' + v + ']');
}
0 голосов
/ 30 марта 2019

Здесь у вас есть одно решение, в котором используется идея, упомянутая CodyKnapp . Он использует Array.reduce () для генерации value->key реверса Map.

let myMap = new Map([
   ["Cortia", 1],
   ["Korea", 1],
   ["Norway", 2]
]);

// Generate the reverse Map.

let res = [...myMap.entries()].reduce((acc, [k, v]) =>
{
    acc.has(v) ? acc.set(v, acc.get(v).concat(k)) : acc.set(v, [k]);
    return acc;
}, new Map());

// Log the new generated Map.

res.forEach((v, k) => console.log(`${k} => ${v}`));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

Примечание , как упоминалось в комментариях, что у вас не может быть Map, который будет дублировать один и тот же key для нескольких разных values.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...