美文网首页
数组分组改成减法运算

数组分组改成减法运算

作者: 泪滴在琴上 | 来源:发表于2022-04-11 10:50 被阅读0次

    这个题的意思就是 [5, [[4, 3], 2, 1]] 变成 (5 - ((4 - 3) - 2 - 1)) 并执行。 且不能使用eval()
    方法一: 既然不能用 eval, 那我们就用new Function吧🤭
    方法二: 当然方法一有点违背了题意,所以还有第二种方法

    var newArr = [5, [[4, 3], 2, 1]]
    
        // 1. 取巧
        // 转为字符串
        let newStringArr = `${JSON.stringify(newArr)}`
        // 循环修改括号和减号
        let fn = newStringArr.split("").map((el) => {
          switch (el) {
            case "[":
              return '('
            case "]":
              return ')'
            case ",":
              return '-'
            default:
              return el
          }
        }).join("")
        // 最终通过new Function 调用可以了!
        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)
    

    方法一的原理就很简单,转成字符串循环修改括号和减号在进行拼接。最终通过 new Function 调用就可以了
    方法二的意思就是通过 reduce 进行一个递归调用 的意思。 如果左边不是数组就可以减去右边的,但如果右边是数组的话,就要把右边的数组先进行减法运算。也是就减法括号运算的的优先级.

    作者:Ali2333
    链接:https://juejin.cn/post/7079681931662589960
    来源:稀土掘金
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    相关文章

      网友评论

          本文标题:数组分组改成减法运算

          本文链接:https://www.haomeiwen.com/subject/wtagjrtx.html