Comments (6)
I agree this would be nice.
from js-quantities.
yes! This would be a much appreciated feature! Is it challenging?
Honestly, I'm just checking this library out for the first time. We're about to bake unit handling into our web app and I'm looking to pick one library to get started... I thought js-quanties was the best - are there any other that support math operations? The big question I had was "Can I serialize and deserialize Qty objects from JSON?"
from js-quantities.
I am open to any suggestion or help about concrete implementation. To me, the best representation of a quantity is its plain string form (as output by Qty#toString()
). In this case, Qty#toJSON
would just be implemented as a call to Qty#toString()
with no arguments.
It is also possible to the client code to add a customized JSON serialization by simply extending Qty.prototype
.
For now, I don't see any use case for a richer data structure except for performance reasons as suggested by @WorldMaker but it might eventually be considered with further argumentation.
from js-quantities.
Yeah, I realized that I could use toString() to serialize and deserialize Qty objects after my last post. I made an atmosphere package to use js-quantities in a Meteor app. Basically, I just had to add a few methods (.toJSONValue(), .typeName(), .clone(), and .eq()) to support automatic handling of Qty object between the client and server.
I was looking over the code for the constructor and saw the option to import from a DefinitionObject. Is a definition object just the following? If so, I could just export this from .toJSONValue() rather than .toString().
{
scalar : Number;
numerator: [ String ],
denominator: [ String ]
}
from js-quantities.
So I made a fork that automatically detects if EJSON is being used and adds support for automatic detection/serialization/deserialization of Qty objects.
var ejson = require('ejson');
var qty = require('js-quantities');
var m = qty('1 m');
var stringified = ejson.stringify({foo: m}) // {"foo":{"$type":"js-quantity","$value":{"scalar":1,"numerator":["<meter>"],"denominator":["<1>"]}}}
var parsed = ejson.parse(stringified);
console.log(parsed.foo.toString()) // 1 m
I had to make changes to the build config to support this and I haven't added any tests.
If there's interest in this, I can submit a PR.
from js-quantities.
I created an npm module ejson-extras
that extends EJSON to support automatic serialization and deserialization of Qty objects.
from js-quantities.
Related Issues (20)
- Conversion of compound units gives wrong result
- getSystems() It would be useful to tag/group the unit names by their SI, Imperial or other system and allow conversion toSystem('imperial')
- Possibility to add a method qty.getUnit() ? HOT 1
- Dividing by temperatures HOT 1
- Dividing by temperature HOT 1
- add metric ton symbol "t" HOT 1
- surfaces (m², km², hectares) HOT 1
- compatibility with Unified Code for Units of Measure HOT 1
- Translation of units into different languages
- no power operators? HOT 1
- Human readable value in contrained range HOT 2
- js-quantities is incompatible with sugarjs and prototypejs
- Lacking precision necessary for required comparisons HOT 10
- No converter for Miliradians
- Swift Converter error: Incompatible units
- Values formatted with group separators do not parse
- Pretty unit output
- Publish new version to npm HOT 1
- Can't import the ES module in Angular HOT 4
- Rounding Issues when converting Millimeter to Centimeter HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from js-quantities.