首页 > 解决方案 > 将字符串点表示法转换为 javascript 对象

问题描述

我正在开发一个现有项目,该项目采用格式奇特的字符串点表示法获取查询参数。但它们必须在处理之前转换为对象。这目前正在通过名称对特定键的条件执行。

如何动态执行?您将在下面找到输入和所需输出的示例。

输入:

{ 
    date.gte: '2019-01-01', 
    date.lt: '2020-01-01' 
}

输出:

{
    date: {
        gte: '2019-01-01',
        lt: '2020-01-01'
    }
}

标签: javascriptnode.jsobjectformatting

解决方案


您可以使用reducesplit方法将每个键拆分为数组并基于该数组构建嵌套结构。

const data = {
  'date.gte': '2019-01-01',
  'date.lt': '2020-01-01'
}

const result = Object.entries(data).reduce((r, [k, v]) => {
  k.split('.').reduce((a, e, i, ar) => {
    return a[e] || (a[e] = ar[i + 1] ? {} : v)
  }, r)

  return r;
}, {})

console.log(result)


推荐阅读