前端手写(二十三)——手写字符串解析

一、写在前面

var a = {
	b: 123,
	c: '456',
	e: '789',
}
var str=`a{a.b}aa{a.c}aa {a.d}aaaa`;
// => 'a123aa456aa {a.d}aaaa'

二、手写
如上述所示,此时如果a对象中存在某一个属性,则直接取出值进行渲染,如果对象中不存在某一个属性,则直接进行渲染。
具体手写代码如下所示

function func(str, obj) {
  let res = ''
  let start = 0
  let flag = false
  let length = str.length
  for (let i = 0; i < length; i++) {
    if (str[i] === '{') {
      start = i + 1
      flag = true
      continue
    }
    if (!flag) {
      res += str[i]
    } else {
      if (str[i] === '}') {
        let curStr = str.slice(start, i)
        let r = match(curStr, obj)
        res += r
        flag = false
      }
    }
  }
  return res
}

function match(str, obj) {
  let curArr = str.split('.').splice(1)
  let o = obj
  while (curArr.length) {
    let shiftOne = curArr.shift()
    if (!o[shiftOne]) {
      return `{${str}}`
    } else {
      o = o[shiftOne]
    }
  }
  return o
}

var a = {
  b: 123,
  c: '456',
  e: '789',
}
var str = `a{a.b}aa{a.c}aa {a.d}aaaa`;
console.log(func(str, a))
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值