I have two objects, as below:
var origin = {
x: 10,
y: 10
}
var coordinates = {
x: 5,
y: 5
}
I calculate the delta as follows:
var delta = {
x : origin.x - coordinates.x,
y : origin.y - coordinates.y
}
This works, BUT I am looking for a more elegant way, given all I really do is origin - coordinates. Unfortunately, origin - coordinates is not valid javascript
Any suggestions? Maybe using a ...
spread operator?
CodePudding user response:
The basic answer is: No, there isn't a way to do that which is likely to pass your "elegance" test. :-) (I like Sairyu's approach of creating a reusable function [perhaps with a shorter name]. Or you might even make it a Point
class with add
, sub
, etc.)
"Elegant" is a value judgement, but if these are the only properties in the objects and you want to avoid explicitly writing x
and y
, you can use a for..in
loop, a for..of
loop on Object.keys
, or a combination of Object.entries
, map
, and Object.fromEntries
though the overhead on that last one starts looking a bit overkill.
const delta = {};
for (const key in origin) {
delta[key] = origin[key] - coordinates[key];
}
or
const delta = {};
for (const key of Object.keys(origin)) {
delta[key] = origin[key] - coordinates[key];
}
or
const delta = Object.fromEntries(
Object.entries(origin).map(
([key, value]) => [key, value - coordinates[key]]
)
);
But again: None of these is likely to be "elegant" by most definitions I can imagine. :-)
CodePudding user response:
Maybe the best way is by making a function, something like this :
function calculate_coordinates(point1, point2) {
const x = point1.x - point2.x;
const y = point1.y - point2.y;
return {x, y};
}