新思路: 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 點贊
評論
評論
共同學習,寫下你的評論
評論加載中...
作者其他優質文章
正在加載中
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦