Presta atención porque en este post vas a hallar la contestación que buscas.Esta crónica fue evaluado por nuestros especialistas para garantizar la calidad y veracidad de nuestro contenido.
Solución:
Si desea buscar/asociar un objeto con un identificador único sin modificar el objeto subyacente, puede utilizar un WeakMap
:
// Note that object must be an object or array,
// NOT a primitive value like string, number, etc.
var objIdMap=new WeakMap, objectCount = 0;
function objectId(object)
if (!objIdMap.has(object)) objIdMap.set(object,++objectCount);
return objIdMap.get(object);
var o1=, o2=, o3=a:1, o4=a:1;
console.log( objectId(o1) ) // 1
console.log( objectId(o2) ) // 2
console.log( objectId(o1) ) // 1
console.log( objectId(o3) ) // 3
console.log( objectId(o4) ) // 4
console.log( objectId(o3) ) // 3
Usando un WeakMap
en vez de Map
asegura que los objetos aún puedan ser recolectados como basura.
No, los objetos no tienen un identificador incorporado, aunque puede agregar uno modificando el prototipo del objeto. He aquí un ejemplo de cómo podrías hacerlo:
(function()
var id = 0;
function generateId() return id++; ;
Object.prototype.id = function()
var newId = generateId();
this.id = function() return newId; ;
return newId;
;
)();
Dicho esto, en general, modificar el prototipo del objeto se considera una práctica muy mala. En cambio, recomendaría que asigne manualmente una identificación a los objetos según sea necesario o use un touch
funcionar como otros han sugerido.
En realidad, no es necesario modificar el object
prototipo. Lo siguiente debería funcionar para ‘obtener’ identificadores únicos para cualquier objeto, de manera suficientemente eficiente.
var __next_objid=1;
function objectId(obj)
if (obj==null) return null;
if (obj.__obj_id==null) obj.__obj_id=__next_objid++;
return obj.__obj_id;
valoraciones y reseñas
Al final de la página puedes encontrar las crónicas de otros desarrolladores, tú de igual forma puedes dejar el tuyo si lo crees conveniente.