Ответ 1
Хотя этот вопрос получил некоторое время назад, вот небольшое обновление:
Решение ES6:
const [ ...keys ] = map.keys();
Предварительное решение ES6:
var keys = map.keySeq().toArray();
Я хочу извлечь ключи() из следующей неизменяемой карты:
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/
Хотя этот вопрос получил некоторое время назад, вот небольшое обновление:
Решение ES6:
const [ ...keys ] = map.keys();
Предварительное решение ES6:
var keys = map.keySeq().toArray();
Вот как выглядит объект ImmutableJS.
Если вы хотите получить:
["firstKey", "secondKey"]
Вам нужно сделать:
console.log(map.keySeq().toArray())
Возможно, просто отвечая на мой собственный вопрос, который привел меня сюда, но я нашел mapKeys()
который даст вам доступ к ключам в обычном цикле. Кажется, немного более "правильный путь". (Документы настолько расплывчаты, кто знает!)
например:
Map({ a: 1, b: 2 }).mapKeys((key, value) => console.log(key, value))
// a 1
// b 2
Лучше всего использовать 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" ]