¿Qué es una implementación de tabla hash de JavaScript que evita colisiones de espacios de nombres de objetos?

StackOverflow https://stackoverflow.com/questions/103679

Pregunta

Antes que nada:Estoy usando una implementación bastante oscura de JavaScript integrado como motor de secuencias de comandos para Adobe InDesign CS3.Esta implementación a veces difiere del javascript "estándar", de ahí mi problema.

Estoy usando Biblioteca jsdiff de John Resig (fuente aquí) para comparar selecciones de texto entre dos documentos.jsdiff utiliza objetos básicos como matrices asociativas para asignar una palabra del texto a otro objeto.(Consulte las variables "ns" y "os" en jsdiff.js, alrededor de la línea 129).

Mis dolores de cabeza comienzan cuando aparece la palabra "reflexionar" en el texto."reflejar" es el valor predeterminado, solo lectura propiedad en todo objetos.Cuando jsdiff intenta asignar un valor en la matriz asociativa a ns['reflect'], todo explota.

Mi pregunta:¿Hay alguna forma de evitar esto?¿Hay alguna manera de hacer una tabla hash en javascript sin usar el objeto básico obvio?

Reglas de juego: cambiar los motores de secuencias de comandos no es una opción.:)

¿Fue útil?

Solución

Es posible que esté "haciendo la pregunta equivocada" (como diría Raymond Chen);En lugar de intentar evitar el uso de objetos básicos, intente cambiar la forma en que se nombran los miembros de la matriz asociativa.

La forma en que intentaría abordar esto:en lugar de que haya un miembro de la matriz ns["reflect"], cambie la forma en que jsdiff construye las matrices para que el miembro sea ns["_reflect"] o alguna otra variación sobre eso.

Otros consejos

Si la implementación JS que está utilizando admite el método hasOwnProperty para objetos, puede usarlo para probar si una propiedad se ha establecido explícitamente para un objeto o si la propiedad se hereda de su prototipo.Ejemplo:

if(object.hasOwnProperty('testProperty')){
     // do something
}

Bien, los objetos en javascript son solo matrices asociativas, realmente no hay otra solución integrada para un hash.Es posible que pueda crear su propia psuedo hashtable envolviendo una clase alrededor de algunas matrices, aunque probablemente habrá un impacto significativo en el rendimiento con el trabajo manual involucrado.

Solo una nota al margen: realmente no he usado ni mirado la biblioteca jsdiff, por lo que no puedo ofrecer ninguna información válida en cuanto a consejos o trucos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top