+19
-16
| /*! | ||
| * nosh.js v0.3.0 | ||
| * nosh.js v0.4.0 | ||
| * https://github.com/lmk123/noshjs | ||
@@ -41,8 +41,8 @@ * Released under the MIT License. | ||
| * 解析一个数字的各个部分 | ||
| * @param {number|string} number | ||
| * @param {*} number | ||
| * @return {{minus: boolean, integer: string, decimal: string}|null} | ||
| */ | ||
| var parseNumber = function (number) { | ||
| number = Number(number); | ||
| if (!isNumber(number)) { return null } | ||
| number = parseFloat(number); | ||
| if (isNaN(number)) { return null } | ||
| var minus = false; | ||
@@ -73,3 +73,3 @@ var stringValue = String(number); | ||
| * @param {number} [fixed=2] - 保留几位小数 | ||
| * @return {string} | ||
| * @return {string|null} | ||
| * @example kmbt(2211) -> 2.21K | ||
@@ -81,3 +81,3 @@ */ | ||
| var num = parseNumber(value); | ||
| if (!num) { return value } | ||
| if (!num) { return null } | ||
| // 整数部分有多少个 3 位 | ||
@@ -93,4 +93,4 @@ var count = Math.min(Math.ceil(num.integer.length / SPLIT_COUNT), KMB_CEILING) - 1; | ||
| * 将一个数字转换为加了千分位的字符串 | ||
| * @param {number} value | ||
| * @return {string} | ||
| * @param {*} value | ||
| * @return {string|null} | ||
| * @example thousands(12345.67) => '12,345.67' | ||
@@ -100,3 +100,3 @@ */ | ||
| var num = parseNumber(value); | ||
| if (!num) { return value } | ||
| if (!num) { return null } | ||
| var minus = num.minus; | ||
@@ -121,6 +121,9 @@ var integer = num.integer; | ||
| * 将一个对象转换成查询字符串 | ||
| * @param obj | ||
| * @param {object} obj | ||
| * @param {string} [prefix] | ||
| * @return {string} | ||
| */ | ||
| var obj2qs = function (obj) { | ||
| var obj2qs = function (obj, prefix) { | ||
| if ( prefix === void 0 ) prefix = ''; | ||
| var qs = []; | ||
@@ -132,3 +135,3 @@ for (var key in obj) { | ||
| } | ||
| return qs.join('&') | ||
| return prefix + qs.join('&') | ||
| }; | ||
@@ -203,5 +206,5 @@ | ||
| * 将一个小数转换为百分比 | ||
| * @param {number|string} number | ||
| * @param {*} value | ||
| * @param {number} [fixed=2] | ||
| * @return {string} | ||
| * @return {string|null} | ||
| */ | ||
@@ -211,4 +214,4 @@ var percentage = function (value, fixed) { | ||
| var number = Number(value); | ||
| if (!isNumber(number)) { return value } | ||
| var number = parseFloat(value); | ||
| if (isNaN(number)) { return null } | ||
| var numberString = (number * 100).toFixed(fixed); | ||
@@ -215,0 +218,0 @@ return parseFloat(numberString) + '%' |
+19
-16
| /*! | ||
| * nosh.js v0.3.0 | ||
| * nosh.js v0.4.0 | ||
| * https://github.com/lmk123/noshjs | ||
@@ -37,8 +37,8 @@ * Released under the MIT License. | ||
| * 解析一个数字的各个部分 | ||
| * @param {number|string} number | ||
| * @param {*} number | ||
| * @return {{minus: boolean, integer: string, decimal: string}|null} | ||
| */ | ||
| var parseNumber = function (number) { | ||
| number = Number(number); | ||
| if (!isNumber(number)) { return null } | ||
| number = parseFloat(number); | ||
| if (isNaN(number)) { return null } | ||
| var minus = false; | ||
@@ -69,3 +69,3 @@ var stringValue = String(number); | ||
| * @param {number} [fixed=2] - 保留几位小数 | ||
| * @return {string} | ||
| * @return {string|null} | ||
| * @example kmbt(2211) -> 2.21K | ||
@@ -77,3 +77,3 @@ */ | ||
| var num = parseNumber(value); | ||
| if (!num) { return value } | ||
| if (!num) { return null } | ||
| // 整数部分有多少个 3 位 | ||
@@ -89,4 +89,4 @@ var count = Math.min(Math.ceil(num.integer.length / SPLIT_COUNT), KMB_CEILING) - 1; | ||
| * 将一个数字转换为加了千分位的字符串 | ||
| * @param {number} value | ||
| * @return {string} | ||
| * @param {*} value | ||
| * @return {string|null} | ||
| * @example thousands(12345.67) => '12,345.67' | ||
@@ -96,3 +96,3 @@ */ | ||
| var num = parseNumber(value); | ||
| if (!num) { return value } | ||
| if (!num) { return null } | ||
| var minus = num.minus; | ||
@@ -117,6 +117,9 @@ var integer = num.integer; | ||
| * 将一个对象转换成查询字符串 | ||
| * @param obj | ||
| * @param {object} obj | ||
| * @param {string} [prefix] | ||
| * @return {string} | ||
| */ | ||
| var obj2qs = function (obj) { | ||
| var obj2qs = function (obj, prefix) { | ||
| if ( prefix === void 0 ) prefix = ''; | ||
| var qs = []; | ||
@@ -128,3 +131,3 @@ for (var key in obj) { | ||
| } | ||
| return qs.join('&') | ||
| return prefix + qs.join('&') | ||
| }; | ||
@@ -199,5 +202,5 @@ | ||
| * 将一个小数转换为百分比 | ||
| * @param {number|string} number | ||
| * @param {*} value | ||
| * @param {number} [fixed=2] | ||
| * @return {string} | ||
| * @return {string|null} | ||
| */ | ||
@@ -207,4 +210,4 @@ var percentage = function (value, fixed) { | ||
| var number = Number(value); | ||
| if (!isNumber(number)) { return value } | ||
| var number = parseFloat(value); | ||
| if (isNaN(number)) { return null } | ||
| var numberString = (number * 100).toFixed(fixed); | ||
@@ -211,0 +214,0 @@ return parseFloat(numberString) + '%' |
+19
-16
| /*! | ||
| * nosh.js v0.3.0 | ||
| * nosh.js v0.4.0 | ||
| * https://github.com/lmk123/noshjs | ||
@@ -43,8 +43,8 @@ * Released under the MIT License. | ||
| * 解析一个数字的各个部分 | ||
| * @param {number|string} number | ||
| * @param {*} number | ||
| * @return {{minus: boolean, integer: string, decimal: string}|null} | ||
| */ | ||
| var parseNumber = function (number) { | ||
| number = Number(number); | ||
| if (!isNumber(number)) { return null } | ||
| number = parseFloat(number); | ||
| if (isNaN(number)) { return null } | ||
| var minus = false; | ||
@@ -75,3 +75,3 @@ var stringValue = String(number); | ||
| * @param {number} [fixed=2] - 保留几位小数 | ||
| * @return {string} | ||
| * @return {string|null} | ||
| * @example kmbt(2211) -> 2.21K | ||
@@ -83,3 +83,3 @@ */ | ||
| var num = parseNumber(value); | ||
| if (!num) { return value } | ||
| if (!num) { return null } | ||
| // 整数部分有多少个 3 位 | ||
@@ -95,4 +95,4 @@ var count = Math.min(Math.ceil(num.integer.length / SPLIT_COUNT), KMB_CEILING) - 1; | ||
| * 将一个数字转换为加了千分位的字符串 | ||
| * @param {number} value | ||
| * @return {string} | ||
| * @param {*} value | ||
| * @return {string|null} | ||
| * @example thousands(12345.67) => '12,345.67' | ||
@@ -102,3 +102,3 @@ */ | ||
| var num = parseNumber(value); | ||
| if (!num) { return value } | ||
| if (!num) { return null } | ||
| var minus = num.minus; | ||
@@ -123,6 +123,9 @@ var integer = num.integer; | ||
| * 将一个对象转换成查询字符串 | ||
| * @param obj | ||
| * @param {object} obj | ||
| * @param {string} [prefix] | ||
| * @return {string} | ||
| */ | ||
| var obj2qs = function (obj) { | ||
| var obj2qs = function (obj, prefix) { | ||
| if ( prefix === void 0 ) prefix = ''; | ||
| var qs = []; | ||
@@ -134,3 +137,3 @@ for (var key in obj) { | ||
| } | ||
| return qs.join('&') | ||
| return prefix + qs.join('&') | ||
| }; | ||
@@ -205,5 +208,5 @@ | ||
| * 将一个小数转换为百分比 | ||
| * @param {number|string} number | ||
| * @param {*} value | ||
| * @param {number} [fixed=2] | ||
| * @return {string} | ||
| * @return {string|null} | ||
| */ | ||
@@ -213,4 +216,4 @@ var percentage = function (value, fixed) { | ||
| var number = Number(value); | ||
| if (!isNumber(number)) { return value } | ||
| var number = parseFloat(value); | ||
| if (isNaN(number)) { return null } | ||
| var numberString = (number * 100).toFixed(fixed); | ||
@@ -217,0 +220,0 @@ return parseFloat(numberString) + '%' |
+2
-2
| /*! | ||
| * nosh.js v0.3.0 | ||
| * nosh.js v0.4.0 | ||
| * https://github.com/lmk123/noshjs | ||
| * Released under the MIT License. | ||
| */ | ||
| !function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n(e.nosh={})}(this,function(e){"use strict";function n(e){if(Array.isArray(e)){var t=[];return e.forEach(function(e,r){t[r]=n(e)}),t}return"object"==typeof e&&e?r({},e):e}function r(e,r){for(var t in r)c.call(r,t)&&(e[t]=n(r[t]));return e}var t=function(e){return"number"==typeof e&&!isNaN(e)},i=function(e){if(e=Number(e),!t(e))return null;var n=!1,r=String(e);"-"===r[0]&&(n=!0,r=r.slice(1));var i=r.indexOf(".");return{minus:n,integer:i>0?r.slice(0,i):r,decimal:i>0?r.slice(i):""}},o=["","K","M","B","T","P","E"],u=o.length,f=Math.pow(10,3),a=Object.prototype.hasOwnProperty,c=Object.prototype.hasOwnProperty;e.extend=function(e){for(var n=[],t=arguments.length-1;t-- >0;)n[t]=arguments[t+1];return null==e?e:(n.forEach(function(n){null!=n&&r(e,n)}),e)},e.copy=n,e.get=function(e,n,r){if(null==e)return r;var t=e;n=[].concat(n);for(var i=0;i<n.length;i+=1)if(null==(t=t[n[i]]))return r;return t},e.isNumber=t,e.kmbt=function(e,n){void 0===n&&(n=2);var r=i(e);if(!r)return e;var t=Math.min(Math.ceil(r.integer.length/3),u)-1;return Number((e/Math.pow(f,t)).toFixed(n))+o[t]},e.thousands=function(e){var n=i(e);if(!n)return e;for(var r=n.minus,t=n.integer,o=n.decimal,u=t.length,f=Math.ceil(u/3),a=[],c=0;c<f;c++)a.unshift(t.slice(-3*(c+1),u-3*c));return(r?"-":"")+a.join(",")+o},e.obj2qs=function(e){var n=[];for(var r in e)a.call(e,r)&&n.push(r+"="+encodeURIComponent(e[r]));return n.join("&")},e.remove=function(e,n){var r=e.indexOf(n);r>=0&&e.splice(r,1)},e.percentage=function(e,n){void 0===n&&(n=2);var r=Number(e);if(!t(r))return e;var i=(100*r).toFixed(n);return parseFloat(i)+"%"},Object.defineProperty(e,"__esModule",{value:!0})}); | ||
| !function(n,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e(n.nosh={})}(this,function(n){"use strict";function e(n){if(Array.isArray(n)){var t=[];return n.forEach(function(n,r){t[r]=e(n)}),t}return"object"==typeof n&&n?r({},n):n}function r(n,r){for(var t in r)f.call(r,t)&&(n[t]=e(r[t]));return n}var t=function(n){if(n=parseFloat(n),isNaN(n))return null;var e=!1,r=String(n);"-"===r[0]&&(e=!0,r=r.slice(1));var t=r.indexOf(".");return{minus:e,integer:t>0?r.slice(0,t):r,decimal:t>0?r.slice(t):""}},i=["","K","M","B","T","P","E"],o=i.length,u=Math.pow(10,3),a=Object.prototype.hasOwnProperty,f=Object.prototype.hasOwnProperty;n.extend=function(n){for(var e=[],t=arguments.length-1;t-- >0;)e[t]=arguments[t+1];return null==n?n:(e.forEach(function(e){null!=e&&r(n,e)}),n)},n.copy=e,n.get=function(n,e,r){if(null==n)return r;var t=n;e=[].concat(e);for(var i=0;i<e.length;i+=1)if(null==(t=t[e[i]]))return r;return t},n.isNumber=function(n){return"number"==typeof n&&!isNaN(n)},n.kmbt=function(n,e){void 0===e&&(e=2);var r=t(n);if(!r)return null;var a=Math.min(Math.ceil(r.integer.length/3),o)-1;return Number((n/Math.pow(u,a)).toFixed(e))+i[a]},n.thousands=function(n){var e=t(n);if(!e)return null;for(var r=e.minus,i=e.integer,o=e.decimal,u=i.length,a=Math.ceil(u/3),f=[],c=0;c<a;c++)f.unshift(i.slice(-3*(c+1),u-3*c));return(r?"-":"")+f.join(",")+o},n.obj2qs=function(n,e){void 0===e&&(e="");var r=[];for(var t in n)a.call(n,t)&&r.push(t+"="+encodeURIComponent(n[t]));return e+r.join("&")},n.remove=function(n,e){var r=n.indexOf(e);r>=0&&n.splice(r,1)},n.percentage=function(n,e){void 0===e&&(e=2);var r=parseFloat(n);if(isNaN(r))return null;var t=(100*r).toFixed(e);return parseFloat(t)+"%"},Object.defineProperty(n,"__esModule",{value:!0})}); |
@@ -1,11 +0,9 @@ | ||
| import isNumber from '../isNumber' | ||
| /** | ||
| * 解析一个数字的各个部分 | ||
| * @param {number|string} number | ||
| * @param {*} number | ||
| * @return {{minus: boolean, integer: string, decimal: string}|null} | ||
| */ | ||
| export default function (number) { | ||
| number = Number(number) | ||
| if (!isNumber(number)) return null | ||
| number = parseFloat(number) | ||
| if (isNaN(number)) return null | ||
| let minus = false | ||
@@ -12,0 +10,0 @@ let stringValue = String(number) |
+2
-2
@@ -12,3 +12,3 @@ import parseNumber from './internal/parseNumber' | ||
| * @param {number} [fixed=2] - 保留几位小数 | ||
| * @return {string} | ||
| * @return {string|null} | ||
| * @example kmbt(2211) -> 2.21K | ||
@@ -18,3 +18,3 @@ */ | ||
| const num = parseNumber(value) | ||
| if (!num) return value | ||
| if (!num) return null | ||
| // 整数部分有多少个 3 位 | ||
@@ -21,0 +21,0 @@ const count = Math.min(Math.ceil(num.integer.length / SPLIT_COUNT), KMB_CEILING) - 1 |
+4
-3
@@ -5,6 +5,7 @@ const { hasOwnProperty } = Object.prototype | ||
| * 将一个对象转换成查询字符串 | ||
| * @param obj | ||
| * @param {object} obj | ||
| * @param {string} [prefix] | ||
| * @return {string} | ||
| */ | ||
| export default function (obj) { | ||
| export default function (obj, prefix = '') { | ||
| const qs = [] | ||
@@ -16,3 +17,3 @@ for (let key in obj) { | ||
| } | ||
| return qs.join('&') | ||
| return prefix + qs.join('&') | ||
| } |
@@ -1,14 +0,12 @@ | ||
| import isNumber from './isNumber' | ||
| /** | ||
| * 将一个小数转换为百分比 | ||
| * @param {number|string} number | ||
| * @param {*} value | ||
| * @param {number} [fixed=2] | ||
| * @return {string} | ||
| * @return {string|null} | ||
| */ | ||
| export default function (value, fixed = 2) { | ||
| const number = Number(value) | ||
| if (!isNumber(number)) return value | ||
| const number = parseFloat(value) | ||
| if (isNaN(number)) return null | ||
| let numberString = (number * 100).toFixed(fixed) | ||
| return parseFloat(numberString) + '%' | ||
| } |
@@ -8,4 +8,4 @@ import parseNumber from './internal/parseNumber' | ||
| * 将一个数字转换为加了千分位的字符串 | ||
| * @param {number} value | ||
| * @return {string} | ||
| * @param {*} value | ||
| * @return {string|null} | ||
| * @example thousands(12345.67) => '12,345.67' | ||
@@ -15,3 +15,3 @@ */ | ||
| const num = parseNumber(value) | ||
| if (!num) return value | ||
| if (!num) return null | ||
| const { | ||
@@ -18,0 +18,0 @@ minus, |
+8
-8
| { | ||
| "name": "noshjs", | ||
| "version": "0.3.0", | ||
| "version": "0.4.0", | ||
| "main": "dist/nosh.common.js", | ||
| "module": "dist/nosh.esm.js", | ||
| "unpkg": "dist/nosh.js", | ||
| "files": ["libs", "dist"], | ||
| "files": [ | ||
| "libs", | ||
| "dist" | ||
| ], | ||
| "scripts": { | ||
| "lint": | ||
| "eslint --ignore-pattern '/dist/' --ignore-pattern '/coverage/' '**/*.js'", | ||
| "lint": "eslint --ignore-pattern '/dist/' --ignore-pattern '/coverage/' '**/*.js'", | ||
| "build": "node build/build.js", | ||
| "pretest": "yarn run lint && yarn run build", | ||
| "test": | ||
| "istanbul cover node_modules/jasmine/bin/jasmine.js -- JASMINE_CONFIG_PATH=jasmine.json", | ||
| "test": "istanbul cover node_modules/jasmine/bin/jasmine.js -- JASMINE_CONFIG_PATH=jasmine.json", | ||
| "prepublishOnly": "yarn test", | ||
| "upload-coverage": | ||
| "cat coverage/lcov.info | node_modules/coveralls/bin/coveralls.js" | ||
| "upload-coverage": "cat coverage/lcov.info | node_modules/coveralls/bin/coveralls.js" | ||
| }, | ||
@@ -19,0 +19,0 @@ "devDependencies": { |
+99
-6
@@ -1,7 +0,100 @@ | ||
| # nosh.js | ||
| # nosh.js [](https://travis-ci.org/lmk123/noshjs) [](https://coveralls.io/github/lmk123/noshjs?branch=master) [](https://david-dm.org/lmk123/noshjs) [](https://www.npmjs.com/package/noshjs) | ||
| [](https://travis-ci.org/lmk123/noshjs) | ||
| [](https://coveralls.io/github/lmk123/noshjs?branch=master) | ||
| [](https://david-dm.org/lmk123/noshjs) | ||
| [](https://david-dm.org/lmk123/noshjs?type=dev) | ||
| [](https://www.npmjs.com/package/noshjs) | ||
| 一个我自己常用的工具函数库。 | ||
| ## 安装 | ||
| 可以用 NPM 或者 Yarn 安装: | ||
| ```bash | ||
| npm i noshjs | ||
| ``` | ||
| 或者直接将 [nosh.js](https://unpkg.com/noshjs) 下载到你的项目中,通过 script 标签引用,此时会注册一个全局变量 `window.nosh`。 | ||
| ## API | ||
| ### nosh.copy(value) | ||
| 类似于 [lodash.cloneDeep](https://lodash.com/docs/4.7.11#cloneDeep),但没有对特殊类型(例如 Set、Map、Buffer 等)做处理,所以性能比 lodash.cloneDeep 高,见 https://github.com/lodash/lodash/issues/1984 | ||
| ### nosh.extend(object, [sources]) | ||
| 类似于 [lodash.merge](https://lodash.com/docs/4.7.11#merge),但没有对特殊类型做处理。 | ||
| ### nosh.get(object, path, [defaultValue]) | ||
| 类似于 [lodash.get](https://lodash.com/docs/4.7.11#get),但是在读取到 `null` 时也会返回 `defaultValue`。例如: | ||
| ```js | ||
| lodash.get({ a: null }, 'a', 'default value') // null | ||
| nosh.get({ a: null }, 'a', 'default value') // 'default value' | ||
| ``` | ||
| 这个方法性能比 lodash.get 低,如果介意的话,可以基于 lodash.get 封装: | ||
| ```js | ||
| function noshGet(object, path, defaultValue) { | ||
| let result = lodash.get(object, path, defaultValue) | ||
| if (result === null) result = defaultValue | ||
| return result | ||
| } | ||
| ``` | ||
| ### nosh.isNumber(value) | ||
| 判断 `value` 是否满足 `typeof value === 'number' && !isNaN(value)`。 | ||
| ### nosh.kmbt(value, [fixed = 2]) | ||
| 将一个数字转换成 KMBT 表现形式的字符串。如果 `value` 不能转换成数字,则返回 `null`。第二个参数可以设置保留多少位小数,默认保留两位。 | ||
| ```js | ||
| nosh.kmbt('not a number') // null | ||
| nosh.kmbt(988) // '988' | ||
| nosh.kmbt(9888) // '9.89K' | ||
| nosh.kmbt(9888777) // '9.89M' | ||
| nosh.kmbt(98887776666) // '98.89B' | ||
| nosh.kmbt(9888777666555) // '9.89T' | ||
| nosh.kmbt(9888777666555444) // '9.89P' | ||
| nosh.kmbt(9888777666555444333) // '9.89E') | ||
| ``` | ||
| ### nosh.obj2qs(object, [prefix]) | ||
| 将一个对象转换成查询字符串。第二个参数用于指定查询字符串的前缀。 | ||
| ```js | ||
| nosh.obj2qs({ a: 1, b: 2 }, '?') // '?a=1&b=2' | ||
| ``` | ||
| ### nosh.percentage(value, [fixed = 2]) | ||
| 将一个数字转换成百分比表现形式的字符串。如果 `value` 不能转换成数字,则返回 `null`。第二个参数可以设置保留多少位小数,默认保留两位。 | ||
| ```js | ||
| nosh.percentage('not a number') // null | ||
| nosh.percentage('1') // '100%' | ||
| nosh.percentage(-0.1) // '-10%' | ||
| ``` | ||
| ### nosh.remove(array, item) | ||
| 从数组中删除指定的元素,这个方法只删除第一个匹配的元素。 | ||
| ```js | ||
| nosh.remove([1, 2, 3, 1], 1) // [2, 3, 1] | ||
| ``` | ||
| ### nosh.thousands(value) | ||
| 将一个数字转换成百分比表现形式的字符串。如果 `value` 不能转换成数字,则返回 `null`。 | ||
| ```js | ||
| nosh.thousands('not a number') // null | ||
| nosh.thousands(1000) // '1,000' | ||
| ``` | ||
| ## 许可 | ||
| MIT |
26867
12.12%761
0.66%101
1162.5%