javascript黑科技之toString
来源:互联网 发布:淘宝申请介入问题描述 编辑:程序博客网 时间:2024/04/28 00:22
今天看co源码时,看到了yield*黑科技。一谈到黑科技,我想起了自己之前用到过两个黑科技:获取数组的最大值和对数组进行排序。
相信很多童鞋在在获取到后台数据,并且要让自己排序的时候,会出现想骂娘的冲动,但是当我们不得不去满足的时候,我们会想到用sort去处理,很明显这很有效。我下面的两个实现采用了一条不同的路,特别是获取最大值时,会让你耳目一新,这两个实现归根到底是对Object.toString的运用。
first: 对数组进行排序(此数组可能是一个基本类型数组,也可能是一个array-object类型)
/** * 数组排序 * @param {Array} arr 待排序数组 * @param {string} key 排序使用的key值,默认为'value'; * @param {string} direct 排序的方向,默认从小到大(可传入任意类型数值,或不传); */function sort(arr, key, direct) { if (!(arr instanceof Array)) return ''; if (!arr[0]) return arr; var tostring = Object.prototype.toString, _key = key || 'value'; if (typeof arr[0] === 'object') { //修改Object.prototype.toString返回排序的元素的key值。 Object.prototype.toString = function() { return Number(this[_key]); } } var direct = Number(direct) <= 0 ? -1 : 1; arr.sort(function(v1, v2) { return direct * (v1 - v2); }); //重置Object.prototype.toString为初始值(必须)。 Object.prototype.toString = tostring; return arr;}
second: 获取数组最值(此数组可能是一个基本类型数组,也可能是一个array-object类型)
/** * 获取数组最值 * @param {Array} arr 待获取最值数组 * @param {string} key 待获取最值数组key值,默认为'value'; * @param {any} flag 获取最大值还是最小值,默认获取最大值(可传入任意类型数值,或不传); */function getMaxOrMin(arr, key, flag) { if (!arr) return ''; if (!arr[0]) return arr; var tostring = Object.prototype.toString, _key = key || 'value'; ret = undefined; if (typeof arr[0] === 'object') { Object.prototype.toString = function() { return this[_key]; } } if (flag === 'min') { flag = 0; } if (Number(flag) <= 0) { ret = Math.min.apply(null, arr); } else { ret = Math.max.apply(null, arr); } Object.prototype.toString = tostring; return ret;}
本文旨在提供一种处理问题的方向,黑科技永远在我们手中,最重要的我们要怎么用。
end: 提供一个更黑的科技。曾经看了一本js书,John Resig写的 好像叫javascript尖刀,具体不确定,全英文的~。里面有讲了一个获取函数形参个数的方法,例如getMaxOrMin。很简单,直接来getMaxOrMin.length。没看到过吧,我在之前也没看到过,所以记得比较清楚,在此分享给大家。
阅读全文
0 0
- javascript黑科技之toString
- javascript黑科技之高效填充
- JavaScript "黑科技知识点"总结
- Angular黑科技之transclude
- Javascript实用黑科技45条
- 黑科技
- 黑科技
- 黑科技
- 《黑科技》
- 内核黑科技之DEFINE宏
- 程序员黑科技之夺宝岛
- 黑科技/隐性科技展望
- C++的黑科技之进制转换
- 老戚的黑科技之SSH隧道技术
- 老戚的黑科技之ssh无密码登录
- eclipse的黑科技之 代码段抽成新方法
- PYthon黑科技之透明通道隐藏图片
- Golang黑科技之——string与[]byte转换
- 实现简单的一页展示多条数据左右翻页功能
- Shade in spring-boot-starter-parent is misconfigur
- 多进程小demo
- JAVA实现斐波那契数列
- 18秋招面经
- javascript黑科技之toString
- smack 4.2客户端自定义iq,解析,自定义处理handler
- 如何在ubuntu上部署开发区块链数字货币
- 10/21 dns域名解析与linux下操作虚拟机
- 洛谷 1339 [USACO09OCT]热浪Heat Wave 最短路
- 【Android】Dialog异常CalledFromWrongThreadException深入分析
- HttpClient中的三种超时设置区别
- CSR1010 基本信息
- 微服务教程-使用Spring Cloud