js如何把字符串以 . 分割转为对象?

比如 var str = 'a.b.c';

要转为:

result = {
    a: {
        b: {
            c: {}
        }
    }
}
阅读 4k
4 个回答

刚在 stackoverflow 找的答案

const str = 'a.b.c';

const obj = str
  .split('.')
  .reduceRight(
    (innerObj, propName) => ({ [propName]: innerObj }),
    {}
  );
console.log(obj);
console.log('result', stringToObject('a.b.c'))

function stringToObject (str) {
  str = str != null || str ? str.split('.') : []
  let res = {}, tmp = res;
  str.forEach(key => {
    tmp[key] = {}
    tmp = tmp[key]
  })
  return res
}

递归的方法,切割第一项和剩余项,
有个《the little schemer》的意思

const str = 'a.b.c'

const strToObj = str => {
  const list = str.split('.')
  const iter = list => {
    if (list.length) {
      const [first, ...rest] = list
      return {
        [first]: iter(rest)
      }
    } else return {}
  }
  return iter(list)
}

console.log(strToObj(str))

看过楼上的 reduce 可以一行:

const result = str
    .split('.')
    .reverse()
    .reduce(
        (pre, cur) => ({[cur]: pre}),
        {}
    )

你们写的都太复杂了,看我的:

const getDeepProp = (o, p) => eval('o.'+p);

看懂掌声!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题