Как добавить значения в ES6 Map - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь узнать о структурах данных карты ES6 и испытываю трудности с пониманием их поведения. Я хотел бы создать карту с массивом в качестве значения и добавить (подтолкнуть) новые значения к текущему значению карты. Например:

let m = new Map()

m.set(1, []) // []

m.set(1, m.get(1).push(2)) // [[1, 1]]

Я не понимаю, почему я не получаю [2] в качестве значения m.get(1) выше. Как я могу добавить значения в массив на моей карте?

Ответы [ 5 ]

0 голосов
/ 04 января 2019

Вот рабочий пример того, что вы пытаетесь сделать (открыть консоль)

Посмотрите здесь . Как видите, метод push возвращает новую длину массива, который вы только что мутировали, отсюда и ваш результат.

0 голосов
/ 04 января 2019

Сбой, потому что возвращаемое push() - это размер массива после push.

  1. Вы можете нажать на содержимое после выполнения get().

    m.get(1).push(2);

  2. Если вы хотите протестировать set(), напишите самовыполняемую функцию, подобную этой:

let m = new Map()

m.set(1, []) // []

console.log(m.get(1))

m.set(1, (() => {m.get(1).push(2);return m.get(1);})());

console.log(m.get(1))
0 голосов
/ 04 января 2019

Лучший способ определить карту в соответствии с вашими потребностями - это четко указать карте, с какими данными вы хотите иметь дело.

в вашем случае вы хотите значения в массиве, мы могли бы получить "идентификатор строки", например

В этом случае у вас будет это:

let map = new Map<String, Array<any>>

Затем вы можете создавать такие предметы, как map["key"] = ["lol", 1, null]

0 голосов
/ 04 января 2019

Есть две вещи. Во-первых, как сказал @ Adriani6, метод push возвращает не указатель на массив, а его размер.

Во-вторых, вам не нужно делать другие m.set, потому что ваш push-запрос напрямую повлияет на массив за ссылкой, возвращенной m.get

function displayMap(m) {
  m.forEach(function(val, key) {
    console.log(key + " => " + val);
  });
}

let m = new Map();

m.set(1, []);

displayMap(m);

m.get(1).push(20);

displayMap(m);
0 голосов
/ 04 января 2019

Это потому, что метод push возвращает размер массива после вставки.

Вы можете изменить свой код на следующий, чтобы добавить в массив:

m.get(1).push(2);

И это обновит значение на карте, нет необходимости пытаться заново установить значение, так как значение передается обратно в качестве ссылки.

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