這個題的意思就是 [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)載請注明出處。