2016-06-01 2 views
2

Предположим, я создал объект Map как этот Map {"a" => "apple", "b" => "banana"}:реверсировать ES6 Карта

m = new Map([ ["a", "apple"], ["b", "banana"] ]); 

Теперь я хочу, чтобы отменить его и получить Map {"b" => "banana", "a" => "apple"}

Я вижу единственный способ сделать это следующим образом:

new Map(Array.from(m.entries()).reverse()); 

который не выглядит ни кратким, ни простым. Есть ли лучший способ?

+5

Что именно вы считаете «лучше»? Может быть, просто введите этот код внутри функции? 'function reverseMap (map) {...}'. Никто не должен знать уродливую правду .... –

+2

Если вы заботитесь о порядке карты, я бы рекомендовал использовать массив в первую очередь. 'На самом деле, карты упорядочены только для того, чтобы быть детерминированными и согласованными в разных машинах, а не заказывать их вручную. – Bergi

+0

@Bergi Я использую Map, потому что мне нужны уникальные ключи: только одно возможное значение в коллекции для каждого ключа. –

ответ

8

Как насчет new Map([...m].reverse());?

let m = new Map([['a', 'apple'], ['b', 'banana']]); 
 
let r = new Map([...m].reverse()); 
 

 
console.log([...m]); 
 
console.log([...r]);

+0

Ничего себе, что означают эти три точки? Никогда не видел его до –

+1

@MikhailBatcer [Оператор распространения] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator) –

10

Вы можете уронить .entries() вызов, как это итератор по умолчанию карты в любом случае:

new Map(Array.from(m).reverse()) 

Что на самом деле, кажется, и кратким и понятным для меня - преобразовать карту к последовательность, обратное, конвертировать обратно на карту.

+0

Я не знал, что карты гарантируют заказ. На что мы должны положиться? – naomik

+0

@naomik: Да, карты (в отличие от объектов) имеют детерминированный порядок, чтобы сделать такие вещи, как это предсказуемо. – Bergi

+0

@Bergi Просто уточнить: 'Object.getOwnPropertyNames()' не производит детерминированный порядок в ES6? (извините за то, что так педантичен) – rand

Смежные вопросы