
JavaScript
zenos_zhou
一只前端小菜鸡,偶尔总结下碰到的问题。
展开
-
前端排序,按照对象数组种某个元素进行排序
import _ from 'lodash'/** * 数据排序 * @param {*} origin 源数据 * @param {*} sortKey 排序的字段 * @param {*} type 排序方式 descending:倒序, ascending:正序 * Rules: 将【pre】和【next】为非零Boolean值【null、undefined、''】的项移到数据最后,不参与正常排序 */function sortByKey(origin, sortKey, typ.原创 2022-03-16 10:37:02 · 1319 阅读 · 2 评论 -
利用函数柯里化判断数据类型
// const curryingDataType = type => data => Object.prototype.toString.call(data) === typeconst curryingDataType = function(type) { return function(data) { return Object.prototype.toString.call(data) === type }}const isObject = c...原创 2021-11-30 09:08:49 · 257 阅读 · 0 评论 -
前端开发常用工具函数
/** * 判断数据类型*/const isObject = data => { return Object.prototype.toString.call(data) === `[object Object]`}const isArray = data => { return Object.prototype.toString.call(data) === `[object Array]`}const isString = data => {...原创 2021-11-12 10:24:06 · 192 阅读 · 0 评论 -
解决JavaScript中 toFixed方法的bug
/** * JavaScript 自带的 toFixed 方法有时候会出现计算不准确的问题 * 例如1.335toFixed(2) = 1.33, 但是实际应用中我们希望得到 1.335toFixed(2) = 1.34 * 重写Number原型对象上的toFixed方法 * 重写之后 1.335toFixed(2) = 1.34*/Number.prototype.toFixed = function(len) { const origin = this let ta...原创 2021-09-28 13:45:59 · 569 阅读 · 0 评论 -
JavaScript对象数组中合并某些属性相同的数据项项
/** * 如下图所示,grade为成绩表,成绩表中分别列出了小明和小红的语文、数学和英文的成绩 * 现在需要将小明和小红的成绩合并 * 每条记录包含5个字段,分别是【姓名、年龄、性别、科目、成绩】 * 将姓名、年龄和性别相同的数据合并*/const grades = [ { name: '小明', age: 15, sex: 'male', class: 'Chinese', grade: 80 }, { name: '小明', age: 15, sex: 'male',.原创 2021-08-23 09:43:54 · 4036 阅读 · 1 评论 -
前端开发中按照汉字首字母排序分组
在前端开发过程中,按照汉字首字母排序分组是很常见的操作,比如联系人列表引入第三方插件 npm i --save jian-pinyin原创 2021-06-03 16:20:13 · 4479 阅读 · 0 评论 -
常见的Javascript六种数组扁平化方法
/* 数组扁平化 所谓数组扁平化,也即是将嵌套数组([1, [2, , [3, [4, 5], [6, 7]]]]) 转换成一维数组 ([1, 2, 3, 4, 5, 6, 7])*/// 利用普通递归实现function flatten1(arr) { if (!(arr instanceof Array)) { return false } let newArr = [] for (let i = 0; i < arr.length; i++) { .原创 2021-03-22 10:37:19 · 182 阅读 · 0 评论 -
手写Javascript浅拷贝
const shallowClone = (target) => { if (typeof target === 'object' && target !== null) { const cloneTarget = Array.isArray(target) ? []: {}; for (let prop in target) { if (target.hasOwnProperty(prop)) { cloneTarget[prop.原创 2021-03-21 13:05:47 · 127 阅读 · 0 评论 -
JS快速排序算法
在Javascript中,排序算法是比较常用到的。//快速排序function quickSort(arr) { if (arr.length <= 1) { return arr } const middleIndex = Math.floor((arr.length -1) / 2) const middle = arr.splice(middleIndex, 1)[0] const left = [] const right = [] for (let原创 2021-03-03 17:11:38 · 909 阅读 · 1 评论 -
找出字符串中出现频率最高的字符
1、首先将字符串构造成一个字符频率的对象,字符作为Key,频率作为value2、其次,遍历构造的对象,比对Value,将Value最大的key输出以下代码仅供参考function maxChar(str) { if (str.length === 1) { return str } const tempArr = str.split('') const tempObj = {} // 构造出现字符频率的对象 tempArr.forEach(item =&g.原创 2021-02-28 17:43:55 · 1724 阅读 · 0 评论 -
JavaScript中如何比较两个数组是否相同?
在一次实际项目开发中,有一个位置需要对两个数组内容进行比较,然后很奇怪的发现在JS中直接用 == 和 === 对两个相同的数组做比较时返回的值是false;查看资料发现Array是引用类型数据,而 == 和 === 只能判断这两个数组是否是同一个实例,因此直接比较会返回false;要想比较两个数组是否相同,只能遍历让其每一项进行对比。console.log([1,2] === [1,2])...原创 2018-12-28 19:20:35 · 1417 阅读 · 0 评论 -
输入一个按照升序排列的数组和一个数字,在数组中查找两个数,使得他们的和正好是输入的那个数字,要求时间复杂度是O(n),如果有多对数字的和等于输入的数字,输入任意一对即可。
已知数组是升序,定义两个下标i,j分别指向数组的第一项和最后一项,将已知数字n和数组中下标i和j的和进行比较,如果n大于i和j的和,则将j自减往前移动一个;如果n小于i和j的和,则将i自加往后移动一位;如此循环比较直到找到满足条件的数或者i >= j为止。function getSum(arr,n){ let i = 0; let j = arr.length-1; while(...原创 2017-11-03 14:51:42 · 962 阅读 · 0 评论