數(shù)組分組改成減法運算

這個題的意思就是 [5, [[4, 3], 2, 1]] 變成 (5 - ((4 - 3) - 2 - 1)) 并執(zhí)行。 且不能使用eval()
方法一: 既然不能用 eval, 那我們就用new Function吧??
方法二: 當(dāng)然方法一有點違背了題意,所以還有第二種方法

var newArr = [5, [[4, 3], 2, 1]]

    // 1. 取巧
    // 轉(zhuǎn)為字符串
    let newStringArr = `${JSON.stringify(newArr)}`
    // 循環(huán)修改括號和減號
    let fn = newStringArr.split("").map((el) => {
      switch (el) {
        case "[":
          return '('
        case "]":
          return ')'
        case ",":
          return '-'
        default:
          return el
      }
    }).join("")
    // 最終通過new Function 調(diào)用可以了!
    new Function("return " + fn)()
    
    
    // 2. 方法二 
    function run(arr) {
      return arr.reduce((pre, cur) => {
        let first = Array.isArray(pre) ? run(pre) : pre
        let last = Array.isArray(cur) ? run(cur) : cur
        return first - last
      })
    }
    run(nweArr)

方法一的原理就很簡單,轉(zhuǎn)成字符串循環(huán)修改括號和減號在進行拼接。最終通過 new Function 調(diào)用就可以了
方法二的意思就是通過 reduce 進行一個遞歸調(diào)用 的意思。 如果左邊不是數(shù)組就可以減去右邊的,但如果右邊是數(shù)組的話,就要把右邊的數(shù)組先進行減法運算。也是就減法括號運算的的優(yōu)先級.

作者:Ali2333
鏈接:https://juejin.cn/post/7079681931662589960
來源:稀土掘金
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容