Как указано в документации для Map
:
Ключи в Map упорядочены, а ключи, добавленные в объект, - нет.Таким образом, при итерации по нему объект Map возвращает ключи в порядке вставки.
Чтобы в полной мере воспользоваться этим, мне нужно вставить элемент в Map
в заданном конкретном порядке.
Я знаю, что это можно сделать с помощью массива, но я предпочитаю использовать Map
, потому что мне нужно много раз искать по ключу, и Map
хорошо работает в этом случае, будучипрост в обслуживании.
Я придумал что-то подобное и хотел бы знать, есть ли более эффективные способы сделать это.
function insertAtIndex(index, key, value, map){
var iterator1 = map[Symbol.iterator]();
var tmpMap = new Map();
var tmpIndex=0;
for (let item of iterator1) {
if(tmpIndex === index){
tmpMap.set(key, value);
}
tmpMap.set(item[0], item[1]);
tmpIndex++;
}
return tmpMap;
}
или
insertCardAtIndex(index: Number, key: string, value:boardCard, map:Map<string, boardCard>): Map<string, boardCard> {
let clonedMap = new Map(map);
let tmpMap = new Map<string, boardCard>();
let tmpIndex = 0;
for (let entry of Array.from(clonedMap.entries())) {
if(tmpIndex === index){
tmpMap.set(key, value);
}
tmpMap.set(entry[0], entry[1]);
tmpIndex++;
}
return tmpMap;
}
В моем случае использования мне никогда не придется иметь дело с картой, достаточно большой, чтобы сделать производительность основной проблемой, поэтому я готов пожертвовать производительностью, если это сделает код более читабельным и обслуживаемым.
Я использую карту имеет «словарь» значений по.Тот факт, что нет способа вставить элемент в определенном порядке, заставляет меня задуматься, стоит ли мне вместо этого использовать массив, несмотря на быстрый поиск и такие методы, как .has()
, .get()
и .set()
, которые действительнополезно, но не стоит того, чтобы не вставлять по определенному индексу.