新思路: JS获取任意数据中最大的数字
标签:
JavaScript
作者: 万千钧
转载请注明出处
先说一下正常的思路
判断数据类型
根据不同类型判断是否是最大数字
过程中如果发现新的数组或者对象, 重复步骤一
另外一个思路
通过将数据转换成JSON, 然后通过正则匹配查找出所有的数字, 在进行匹配
不过在这之前我们要先把对象Key中的数字排除, 它不应该属于数据.
转换成代码就是这样
//方法一leta={ a:1,100:[2,4,6], c:{ data:['9',2] }, d:'70'}/** * 由于并不一定知道数据到底是什么样子 * 所以要进行判断, 然后使用深度优先搜索 * @param data 传入任意数据 * @return {Number} */function deepFirstSearchMax (data) { let max = null /** * 判断数据类型, 调用相应的搜索函数 */ switch (data.constructor) { case Object: ObjectSearch(data) break case Array: ArraySearch(data) break default: if (Number(data) > max) { max = Number(data) } } /** * 如果数据是对象, 进行对象遍历 * @param {Object} obj 传入的对象 */ function ObjectSearch (obj) { for (let key in obj) { let data = obj[key] switch (data.constructor) { case Object: ObjectSearch(data) break case Array: ArraySearch(data) break default: if (Number(data) > max) { max = Number(data) } } } } /** * 如果是数据是数组, 进行数组遍历 * @param arr */ function ArraySearch (arr) { arr.forEach(data => { switch (data.constructor) { case Object: ObjectSearch(data) break case Array: ArraySearch(data) break default: if (Number(data) > max) { max = Number(data) } } }) } return max }
//方法二/** * 灵感来自于Object的深拷贝 * 可以通过JSON来把对象中所有的值取出来, 正则匹配数字, 然后找出最大数字 * 但是必须先解决如果 Object 的 Key 有数字的情况 * 所以先把所有Key中带有数字的替换成随机英文字符串 * @param data * @return {Number} */function jsonHack (data) { /** * 把所有Object中带数字的key替换成随机的英文字符串 * @param {Object} obj */ function changeObjectKey (obj) { for (let key in obj) { let data = obj[key] if (data.constructor === Object) { changeObjectKey(data) } else { if (/[0-9]/.test(key)) { let randomStr = '' for (let i = 0; i < 10; i++) { randomStr += String.fromCharCode(65 + Math.ceil(Math.random() * 25)) } obj[randomStr] = obj[key] delete obj[key] } } } } /** * 获取任意对象中最大的数字 * @param {Object} obj * @return {number} */ function getMaxNumber (obj) { let numberArray = JSON.stringify(obj) .match(/[0-9]+/g) .map(val => (Number(val))) return Math.max(...numberArray) } if (data.constructor === Object) { changeObjectKey(data) } return getMaxNumber(data) }
作者:万千钧
链接:https://www.jianshu.com/p/db8459de73c1
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦