第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

新思路: JS獲取任意數(shù)據(jù)中最大的數(shù)字

標(biāo)簽:
JavaScript

作者: 万千钧

转载请注明出处

先说一下正常的思路

  1. 判断数据类型

  2. 根据不同类型判断是否是最大数字

  3. 过程中如果发现新的数组或者对象, 重复步骤一

另外一个思路

  1. 通过将数据转换成JSON, 然后通过正则匹配查找出所有的数字, 在进行匹配

  2. 不过在这之前我们要先把对象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


點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消