Immutable.js получить ключи от карты/хэша

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

var map = Immutable.fromJS({"firstKey": null, "secondKey": null });
console.log(JSON.stringify(map.keys()));

Я ожидал бы выход:

["firstKey", "secondKey"]

Однако это выдает:

{"_type":0,"_stack":{"node":{"ownerID":{},"entries":[["firstKey",null],["secondKey",null]]},"index":0}}

Как это сделать правильно?

JSFiddle link: https://jsfiddle.net/o04btr3j/57/

Ответ 1

Хотя этот вопрос получил некоторое время назад, вот небольшое обновление:

Решение ES6:

const [ ...keys ] = map.keys();

Предварительное решение ES6:

var keys = map.keySeq().toArray();

Ответ 2

Вот как выглядит объект ImmutableJS.

Если вы хотите получить:

["firstKey", "secondKey"]

Вам нужно сделать:

console.log(map.keySeq().toArray())

Ответ 3

Возможно, просто отвечая на мой собственный вопрос, который привел меня сюда, но я нашел mapKeys() который даст вам доступ к ключам в обычном цикле. Кажется, немного более "правильный путь". (Документы настолько расплывчаты, кто знает!)

например:

Map({ a: 1, b: 2 }).mapKeys((key, value) => console.log(key, value))
// a 1
// b 2

Ответ 4

Лучше всего использовать Immutable.js для использования структур данных Immutable и минимизировать преобразования в типы JavaScript. Для этой проблемы мы можем использовать keySeq(), которая возвращает новый Seq.Indexed (упорядоченный индексированный список значений) ключей этой карты. Затем мы можем установить список на эти значения и назначить этот список переменной для последующего использования. Вот пример того, как это решение может быть реализовано:

import { Map, List } from 'immutable';

const exampleMap = Map({ a: 10, b: 20, c: 30 });

const keys = List(exampleMap.keySeq()); // List [ "a", "b", "c" ]