Tengo dos objetos, como a continuación:
var origin = { x: 10, y: 10 } var coordinates = { x: 5, y: 5 }Calculo el delta de la siguiente manera:
var delta = { x : origin.x - coordinates.x, y : origin.y - coordinates.y }Esto funciona, PERO estoy buscando una forma más elegante, dado que todo lo que realmente hago es coordenadas de origen . Desafortunadamente, origen - coordenadas no es un javascript válido
¿Alguna sugerencia? ¿Quizás usando un ... operador de propagación?
La respuesta básica es: No, no hay una manera de hacer eso que pueda pasar su prueba de "elegancia". :-) (Me gusta el enfoque de Sairyu de crear una función reutilizable [quizás con un nombre más corto]. O incluso podría convertirla en una clase Point con add , sub , etc.)
"Elegante" es un juicio de valor, pero si estas son las únicas propiedades en los objetos y desea evitar escribir explícitamente x e y , puede usar un bucle for..in , un bucle for..of en Object.keys , o una combinación de Object.entries , map y Object.fromEntries aunque la sobrecarga en este último comienza a parecer un poco exagerada.
const delta = {}; for (const key in origin) { delta[key] = origin[key] - coordinates[key]; }o
const delta = {}; for (const key of Object.keys(origin)) { delta[key] = origin[key] - coordinates[key]; }o
const delta = Object.fromEntries( Object.entries(origin).map( ([key, value]) => [key, value - coordinates[key]] ) );Pero de nuevo: es probable que ninguno de estos sea "elegante" según la mayoría de las definiciones que puedo imaginar. :-)
Quizás la mejor manera es haciendo una función, algo como esto:
function calculate_coordinates(point1, point2) { const x = point1.x - point2.x; const y = point1.y - point2.y; return {x, y}; }