diff --git a/script-universal_function.js b/script-universal_function.js index 5a0f0b5e..fc781825 100644 --- a/script-universal_function.js +++ b/script-universal_function.js @@ -187,7 +187,7 @@ function BigNumberToStringLocalise(separators, splitDigits = 3 ) { if (splitDigits < 1) throw new RangeError('数字分隔位数至少是1位'); const grouping = 10 ** splitDigits; - separators = separators.map(s=>s.toString()); + separators = separators.map(String); //确保所有的分割符都是字符串 return function(options = {}){ const thisValue = this.valueOf(); @@ -210,25 +210,24 @@ function BigNumberToStringLocalise(separators, splitDigits = 3 ) { numLevels.push(numTemp); } - if (options?.sub) { - let outFragment = document.createDocumentFragment(); - if (thisValue < 0) outFragment.append('-'); - for (let i = numLevels.length; i--; ) { - if (numLevels[i] > 0) { - const separator = document.createElement("sub"); - separator.textContent = separators[i]; - outFragment.append(numLevels[i].toString(10), separator); - } - } - return outFragment; - } else { - let outStr = thisValue < 0 ? '-' : ''; - for (let i = numLevels.length; i--; ) { - if (numLevels[i] > 0) - outStr += numLevels[i].toString(10) + separators[i]; + const { sub: useSubElement } = options; + const outArr = []; + if (thisValue < 0) outArr.push('-'); //小于0的添加负号 + for (let i = numLevels.length - 1; i >= 0; i--) { + if (numLevels[i] == 0) continue; //如果这一段是0,直接不显示 + + let numberStr = numLevels[i].toString(10); + if (i == numLevels.length - 1) numberStr = numberStr.padStart(i == numLevels.length - 1 ? 1 : splitDigits, "0"); + outArr.push(numberStr); + if (useSubElement) { + const separator = document.createElement("sub"); + separator.textContent = separators[i]; + outArr.push(separator); + } else { + outArr.push(separators[i]); } - return outStr.trim(); } + return useSubElement ? outArr.nodeJoin() : outArr.join('').trim(); } } Number.prototype.bigNumberToString = BigNumberToStringLocalise(['', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y', 'R', 'Q'], 3); @@ -297,20 +296,16 @@ Array.prototype.groupBy = function(func) { //将内容添加到代码片段 DocumentFragment.prototype.ap = function(...args) { - args.forEach(arg=>{ - if (Array.isArray(arg)) //数组,递归自身 - { - arg.forEach(item=>this.ap(item)); - } - else if (arg !== null && arg !== void 0) //其他内容的转换为文字添加 - { - this.append(arg); - } - }, this); + const items = args.flat(Infinity).filter(item=>item !== null && item !== void 0); + this.append(...items); return this; } -//将数组和分隔符添加到一个代码片段,类似join +/** + * 将数组和分隔符添加到一个代码片段,类似join + * @param {(string | Node)} separator 每个对象之间合并的分割符或代码片段 + * @returns {DocumentFragment} 一个文档片段 + */ Array.prototype.nodeJoin = function(separator) { const frg = document.createDocumentFragment(); diff --git a/service-worker.js b/service-worker.js index 6ea585bb..c1546086 100644 --- a/service-worker.js +++ b/service-worker.js @@ -37347,7 +37347,7 @@ const cachesMap = new Map([ ], [ "script-universal_function.js", - "dd8e4ef8d3d4c88c7b4010d11fe86fb1" + "ce03c46f0d40b771ac642490dad87ec7" ], [ "script.js",