Sobre San Valentin, dia del amor, esas cosas, la amistad, expresar sentimientos miscelaneos, etc.
miércoles, 22 de noviembre de 2017
Alternativa a Object.assign
Holas holas!!!
Ok esta es la situación...Internet Explorer, no soporta operaciones como Object.assign({}...), que permite crear objetos (y no referenciarlos, lo que normalmente ocurre cuando hacemos una asignación).
Solución? Creé un pequeño snippet que emula el comportamiento de Object.assign, pero apoyándome en el objeto arguments de javascript. arguments es un objeto que vive dentro del contexto (o scope) de una función en javascript, y su objetivo es mantener una lista de todos los argumentos pasados a la función. Vayamos al grano, este es el snippet:
_assign() {
const data = {};
Array.from(arguments).forEach((payload) => {
Object.keys(payload).forEach((key) => {
data[key] = payload[key];
});
});
return data;
}
Ahora, supongamos que tenemos este objeto:
var lun_mar = {'lunes': 1, 'martes': 2}
var mier_jue = {'miércoles': 3, 'jueves': 4}
Podrías usar esta función de la siguiente manera:
var dias = _assign(lun_mar, mier_jue);
y obtendrías:
dias = {'lunes': 1, 'martes': 2, 'miercoles': 3, 'jueves': 4}
listo!!
Esta Solución es O((tamaño de argumentos) * (sumatoria de todas las propiedades internas de los objetos en los argumentos))
Tengo una segunda solución, pero no sé qué tal les parezca. Aquí vamos:
Tomando en cuenta el mismo caso anterior, me apoyo en JSON.stringify, que es una función que me devuelve el objeto javascript en formato json. La solución para este caso puntual sería:
dias = JSON.parse( (JSON.stringify(lun_mar) + JSON.stringify(mier_jue)).replace('}{', ',') );
y voilá vuelven a tener como resulto
dias = {'lunes': 1, 'martes': 2, 'miercoles': 3, 'jueves': 4}
Cuál de los 2 approaches les gusta más? Personalmente el primero, a pesar de ser mas costoso, me parece mejor porque me da la facilidad de poder agregar cualquier objeto.
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario