Tengo un fragmento de código que se parece a esto
const { Map } = require('immutable@4.0.0') let map = new Map().setIn(["user",["alex","country"]],"Poland") map.getIn(["user",["alex","country"]) Espero que lo anterior devuelva "Poland" , pero no es así. Supongo que el tipo de referencia ["alex", "country"] se serializa de manera diferente al configurar y consultar. Cualquier ayuda sobre cómo lograr esto sería útil. Evito tener que manejar la serialización de Array manualmente
La matriz no está serializada. immutable usa el objeto real (su referencia) como clave y el operador igual para comparar claves. Eso significa que la primera ["alex","country"] y la segunda ["alex","country"] son dos claves diferentes.
Este fragmento muestra el problema:
if (['alex', 'country'] !== ['alex', 'country']) { console.log('The references are different'); }tengo 3 soluciones:
1. Almacenar una referencia en una variable
Puede almacenar una referencia a la matriz en una variable para usarla como clave:
const { Map } = require('immutable'); const arr = ['alex', 'country']; let map = new Map().setIn(['user', arr], 'Poland'); console.log(map.getIn(['user', arr])); 2. Serialice la matriz usando toString
Una solución alternativa es serializar los arreglos usando toString :
const { Map } = require('immutable@4.0.0') let map = new Map().setIn(["user",["alex","country"].toString()],"Poland") map.getIn(["user",["alex","country"].toString()])Fragmento de ejemplo:
if (['alex', 'country'].toString() === ['alex', 'country'].toString()) { console.log('The serialized arrays are equal'); }Pero recuerde que la serialización de diferentes matrices puede generar la misma cadena:
if (['alex', 'country'].toString() === ['alex,country'].toString()) { console.log('Serializing different arrays can yield the same string'); }3. Aplane la matriz
Otro enfoque es aplanar la matriz de ruta:
const { Map } = require('immutable'); let map = new Map().setIn(['user', ['alex', 'country']].flat(), 'Poland'); console.log(map.getIn(['user', ['alex', 'country']].flat()));