From 1dfd6baf7266899e37d6b647cbb5eb72cf17d8cd Mon Sep 17 00:00:00 2001 From: yutent Date: Thu, 27 Jan 2022 15:41:47 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- History.md | 10 ++++++++++ Readme.md | 42 +++++++++++++++++++++--------------------- src/index.mjs | 5 ++--- src/lib/array.js | 33 ++++++++++++++++++++++++++++++--- src/lib/date.js | 11 ++++------- src/lib/number.js | 11 +++-------- src/lib/object.js | 6 ++---- src/lib/string.js | 19 ++++++------------- 8 files changed, 78 insertions(+), 59 deletions(-) diff --git a/History.md b/History.md index 2946f9d..e4e5b45 100644 --- a/History.md +++ b/History.md @@ -1,3 +1,13 @@ +2.1.0 / 2022-01-27 +================== + * Array.prototype.item 更名为 Array.prototype.at + * String.prototype.item 更名为 String.prototype.at + * Array 增加findLast()和findLastIndex()原型方法 + * Object 增加toParams()原型方法 + * String 增加toJson()原型方法 + * 重写Array的flat, flatMap原型方法, 性能提升5~10倍(视数据结构而定) + * 使用EsBuild打包代码 + 2.0.0 / 2020-09-18 ================== * 重构, 分cjs版和esm版。 diff --git a/Readme.md b/Readme.md index c859834..7f34420 100644 --- a/Readme.md +++ b/Readme.md @@ -6,39 +6,39 @@ ```js ├── Obejct -│ └── empty(any) // 判断对象是否为空对象 +│ └── .empty(any) // 判断对象是否为空对象 ├── Obejct.prototype -│ └── toParams() // 把对象转为 key1=value1&key2=value2 格式 +│ └── .toParams() // 把对象转为 key1=value1&key2=value2 格式 │ ├── Array.prototype -│ ├── flat(depth) // 数组降维 -│ ├── flatMap(fn) // 等价于 map(fn) -> flat(1) -│ ├── at(index) // 读取指定位置的元素, 负值则从后往前读 -│ ├── findLast(fn) // 查找匹配的最后一项 -│ └── findLastIndex(fn) // 查找匹配的最后一项的索引值 +│ ├── .flat(depth) // 数组降维 +│ ├── .flatMap(fn) // 等价于 map(fn) -> flat(1) +│ ├── .at(index) // 读取指定位置的元素, 负值则从后往前读 +│ ├── .findLast(fn) // 查找匹配的最后一项 +│ └── .findLastIndex(fn) // 查找匹配的最后一项的索引值 │ ├── Date -│ └── isDate(any) // 判断对象是否为 日期对象 +│ └── .isDate(any) // 判断对象是否为 日期对象 ├── Date.prototype -│ ├── getWeek() // 获取当前是本月第几周 -│ ├── getFullWeek() // 获取当前是本年度第几周 -│ └── format(formatStr) // 把日期按指定格式转换 +│ ├── .getWeek() // 获取当前是本月第几周 +│ ├── .getFullWeek() // 获取当前是本年度第几周 +│ └── .format(formatStr) // 把日期按指定格式转换 │ ├── String.prototype -│ ├── splice(index, len, pad) // 类似数组的splice方法 -│ ├── htmlspecialchars() // 字符串HTML安全转义 -│ ├── tohtml() // htmlspecialchars的还原 -│ ├── xss() // 字符串安全转义 -│ ├── escape() // js特殊字符的转义 -│ ├── at() // 读取指定位置的字符, 负值则从后往前读 -│ └── toJson() // 将url参数转为对象 +│ ├── .splice(index, len, pad) // 类似数组的splice方法 +│ ├── .htmlspecialchars() // 字符串HTML安全转义 +│ ├── .tohtml() // htmlspecialchars的还原 +│ ├── .xss() // 字符串安全转义 +│ ├── .escape() // js特殊字符的转义 +│ ├── .at(index) // 读取指定位置的字符, 负值则从后往前读 +│ └── .toJson() // 将url参数转为对象 │ ├── Number -│ ├── parse(str) // 将安全范围内的数字字符串转为数字类型 -│ └── fromString(str) // 将字符串转为数字类型 +│ ├── .parse(str) // 将安全范围内的数字字符串转为数字类型 +│ └── .fromString(str) // 将字符串转为数字类型 │ └── Promise - └── defer() // 创建一个延迟的Promise对象 + └── .defer() // 创建一个延迟的Promise对象 ``` diff --git a/src/index.mjs b/src/index.mjs index 814ce0a..6d7c911 100644 --- a/src/index.mjs +++ b/src/index.mjs @@ -1,8 +1,7 @@ /** * - * @authors yutent (yutent@doui.cc) - * @date 2017-02-27 18:01:54 - * + * @author yutent + * @date 2022/01/27 15:33:09 */ import './lib/object.js' diff --git a/src/lib/array.js b/src/lib/array.js index 6f9b1a0..6304c20 100644 --- a/src/lib/array.js +++ b/src/lib/array.js @@ -18,7 +18,6 @@ Object.defineProperty(Array.prototype, 'flat', { return arr }, - enumerable: false, writable: true }) @@ -26,7 +25,6 @@ Object.defineProperty(Array.prototype, 'flatMap', { value: function(fn) { return this.map(fn).flat() }, - enumerable: false, writable: true }) @@ -39,7 +37,36 @@ if (!Array.prototype.at) { } return this[n] }, - enumerable: false, + writable: true + }) +} + +if (!Array.prototype.findLast) { + Object.defineProperty(Array.prototype, 'findLast', { + value: function(fn) { + let num = this.length + while (num > 0) { + let item = this[--num] + if (fn(item, num)) { + return item + } + } + }, + writable: true + }) + + // 没有findLast也不会有findLastIndex + Object.defineProperty(Array.prototype, 'findLastIndex', { + value: function(fn) { + let num = this.length + while (num > 0) { + let item = this[--num] + if (fn(item, num)) { + return num + } + } + return -1 + }, writable: true }) } diff --git a/src/lib/date.js b/src/lib/date.js index d290698..3375e7a 100644 --- a/src/lib/date.js +++ b/src/lib/date.js @@ -9,7 +9,7 @@ if (!Date.isDate) { value: function(obj) { return obj && typeof obj === 'object' && obj.getTime ? true : false }, - enumerable: false + writable: true }) } @@ -22,8 +22,7 @@ if (!Date.prototype.getFullWeek) { let firstDay = that.getDay() let numsOfToday = (this - that) / 24 / 360 / 1000 return Math.ceil((numsOfToday + firstDay) / 7) - }, - enumerable: false + } }) //获取当天是本月第几周 @@ -34,8 +33,7 @@ if (!Date.prototype.getFullWeek) { let thisYear = this.getFullYear() let firstDay = new Date(thisYear, thisMonth, 1).getDay() return Math.ceil((today + firstDay) / 7) - }, - enumerable: false + } }) } @@ -82,7 +80,6 @@ if (!Date.prototype.format) { str = str.replace(new RegExp(i, 'g'), reg[i]) } return str - }, - enumerable: false + } }) } diff --git a/src/lib/number.js b/src/lib/number.js index bbdf9cf..9b08791 100644 --- a/src/lib/number.js +++ b/src/lib/number.js @@ -19,10 +19,7 @@ if (!Number.parse) { } } else { if (isFinite(val)) { - if ( - val >= Number.MIN_SAFE_INTEGER && - val <= Number.MAX_SAFE_INTEGER - ) { + if (val >= Number.MIN_SAFE_INTEGER && val <= Number.MAX_SAFE_INTEGER) { val = +val } } @@ -30,8 +27,7 @@ if (!Number.parse) { } } return val - }, - enumerable: false + } }) } @@ -40,7 +36,6 @@ if (!Number.fromString) { Object.defineProperty(Number, 'fromString', { value: function(val) { return +val || 0 - }, - enumerable: false + } }) } diff --git a/src/lib/object.js b/src/lib/object.js index bbb75ee..010b9cd 100644 --- a/src/lib/object.js +++ b/src/lib/object.js @@ -17,8 +17,7 @@ if (!Object.empty) { } } catch (e) {} return true - }, - enumerable: false + } }) } @@ -34,7 +33,6 @@ if (!Object.prototype.toParams) { params += `&${k}=${this[k]}` } return params.slice(1) - }, - enumerable: false + } }) } diff --git a/src/lib/string.js b/src/lib/string.js index 32d0cd2..39f2516 100644 --- a/src/lib/string.js +++ b/src/lib/string.js @@ -35,8 +35,7 @@ if (!String.prototype.splice) { return strl + fill + strr } - }, - enumerable: false + } }) } @@ -55,8 +54,7 @@ if (!String.prototype.htmlspecialchars) { } else { return str.replace(/"/g, '"') } - }, - enumerable: false + } }) } @@ -69,8 +67,7 @@ if (!String.prototype.tohtml) { .replace(/"/gi, '"') .replace(/'/g, "'") .replace(/&/gi, '&') - }, - enumerable: false + } }) } @@ -86,8 +83,7 @@ if (!String.prototype.xss) { ) .replace(/(%0[0-8bcef])|(%1[0-9a-f])/g, '') return str - }, - enumerable: false + } }) } @@ -96,8 +92,7 @@ if (!String.prototype.escape) { Object.defineProperty(String.prototype, 'escape', { value: function() { return this.replace(/('|"|&|\\|\}|\{|\(|\)|;|=|\,|&)/g, '\\$1') - }, - enumerable: false + } }) } @@ -110,7 +105,6 @@ if (!String.prototype.at) { } return this[n] }, - enumerable: false, writable: true }) } @@ -132,7 +126,6 @@ if (!String.prototype.toJson) { obj[it[0]] = it[1] || '' } return obj - }, - enumerable: false + } }) }