blog icon indicating copy to clipboard operation
blog copied to clipboard

实现parse取值函数

Open wuxianqiang opened this issue 4 years ago • 0 comments

let obj = {
  a: 1,
  b: { c: 2 },
  d: [1, 2, 3, 4],
  e: [{ f: [5, 6] }]
}

let r1 = parse(obj, 'a')
let r2 = parse(obj, 'b.c')
let r3 = parse(obj, 'd[2]')
let r4 = parse(obj, 'e[0].f[0]')

实现方案1new Function

function parse(obj, str) {
  let fn = new Function('obj', 'return obj.' + str)
  return fn(obj)
}

实现方案2split

function parse(obj, str) {
  str = str.replace(/\[(\d+)\]/g, '.$1')
  let arr = str.split('.')
  arr.forEach(item => {
    obj = obj[item]
  })
  return obj
}

wuxianqiang avatar Mar 14 '20 09:03 wuxianqiang