From 4f645a44c35fd103271345a41091fbac30af8c5d Mon Sep 17 00:00:00 2001 From: Luk Date: Sat, 4 May 2024 12:28:32 +0800 Subject: [PATCH] change `'keysort` to `keysort_array` --- coretool.js | 47 ++++++++++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/coretool.js b/coretool.js index 5b79cc3..f8ecb95 100644 --- a/coretool.js +++ b/coretool.js @@ -10,10 +10,6 @@ module.exports = { sleep: (ms) => new Promise((resolve, reject) => setTimeout(resolve, ms)), - objectize_array (arr, key) { - return arr.reduce((obj, item) => ({ ...obj, [item[key]]: item }), {}) - }, - deepFreeze (obj) { if (typeof obj !== 'object' || obj === null) { return obj @@ -316,22 +312,6 @@ module.exports = { return (parent[keychain[keychain.length - 1]] = value) }, - /** - * 对数组中的对象,按对象的key进行sortType排序 - * @param key 数组中的对象为object,按object中的key进行排序 - * @param sortType true为降序;false为升序 - * 用法: - * var ary=[{id:1,name:"b"},{id:2,name:"b"}]; - * ary.sort(keysort('name',true)); - * ary.sort(keysort('name',false)); - * ary.sort(keysort('id',false)); - */ - keysort (key, sortType) { - return function (a, b) { - return sortType ? ~~(a[key] < b[key]) : ~~(a[key] > b[key]) - } - }, - number_precision (number, precision = 4) { if (isFinite(number)) // null, '', '0', [] return Number(Number(number).toFixed(precision)) @@ -339,11 +319,36 @@ module.exports = { return 0 }, + // 返回新的数组 filter_story (story) { if (Array.isArray(story)) { return story.filter(section => Object.values(section).some(val => val?.trim?.())) // (section.text || section.image || section.video)?.trim?.() } else { return [] } - } + }, + + /** + * 对数组中的对象,按对象的key进行sortType排序 + */ + keysort_array (arr, key, order = 'ASC') { + if (Array.isArray(arr) && typeof (key) === 'string' && key) { + return arr.sort((a, b) => { // 负数: a, b. 正数: b, a + if (typeof (a[key]) === 'number' && typeof (b[key]) === 'number') { + return (order === 'DESC') ? b[key] - a[key] : a[key] - b[key] + } else if (typeof (a[key]) === 'string' && typeof (b[key]) === 'string') { + return (order === 'DESC') ? b[key].localeCompare(a[key]) : a[key].localeCompare(b[key]) + } else { + return 0 + } + }) + } else { + return arr + } + }, + + objectize_array (arr, key) { // 是 Object.keys/values/entries 的反向操作,相当于 Array.objectize,把数据转成对象 + return arr.reduce((obj, item) => ({ ...obj, [item[key]]: item }), {}) + }, + }