将字符串点符号转换为javascript对象

将字符串点符号转换为javascript对象,javascript,node.js,object,formatting,Javascript,Node.js,Object,Formatting,我正在处理一个现有的项目,该项目以一种格式奇怪的字符串点表示法获取查询参数。但它们必须在处理之前转换为对象。目前正在按名称使用特定键上的条件执行此操作 如何动态执行此操作?下面是输入和所需输出的示例 输入: { date.gte: '2019-01-01', date.lt: '2020-01-01' } 输出: { date: { gte: '2019-01-01', lt: '2020-01-01' } } 你说的“格

我正在处理一个现有的项目,该项目以一种格式奇怪的字符串点表示法获取查询参数。但它们必须在处理之前转换为对象。目前正在按名称使用特定键上的条件执行此操作

如何动态执行此操作?下面是输入和所需输出的示例

输入:

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

{
    date: {
        gte: '2019-01-01',
        lt: '2020-01-01'
    }
}
你说的“格式奇怪的字符串点符号”我想你是指
“date.gte”
&
“date.lt”

const输入={
“日期.gte”:“2019-01-01”,
“日期.lt”:“2020-01-01”
};
const res=Object.keys(输入)。reduce(
(结果,当前)=>{
常量[,运算符]=当前拆分(“.”);
结果.日期[运算符]=输入[当前];
返回结果;
},
{日期:{}
);

控制台日志(res)
您可以使用
reduce
split
方法将每个键拆分为数组,并基于该数组构建嵌套结构

const数据={
“日期.gte”:“2019-01-01”,
“date.lt”:“2020-01-01”
}
const result=Object.entries(data).reduce((r[k,v])=>{
k、 拆分('.')。减少((a,e,i,ar)=>{
返回a[e]| |(a[e]=ar[i+1]?{}:v)
},r)
返回r;
}, {})

console.log(result)
这是对Dan答案的改进,它不依赖于知道原始对象中的键值对。尽管内纳德的回答把这件事说得天花乱坠,但我在这件事上花了太长时间,所以我没有把它贴出来:)

const formatter=(weirdObject,s=”。)=>Object.keys(weirdObject.reduce((acc,cur)=>{
常量[父,子]=当前拆分;
如果(!acc[parent])acc[parent]={};
acc[parent][child]=古怪对象[cur];
返回acc;
}, {});
//--演示:
常量输入1={
“日期.gte”:“2019-01-01”,
“日期.lt”:“2020-01-01”
};
常量输入2={
“人名”:“马特”,
“人:年龄”:19
};
const res1=格式化程序(input1);
const res2=格式化程序(input2':');
控制台日志(res1);

console.log(res2)您尝试过什么,它到底有什么问题?您具体对哪个部分有问题?我尝试使用Object.keys(obj).forEach(function(key){}实现,其中我将尝试查看key是否包含句点,如果包含句点,则使用split('.'))。然后获取这些结果并返回它们。只是不确定这是一个有效的还是正确的路径。请给出一个答案。那么需要什么效率?什么是“正确”的意思?失败原因:const input={“date.gte.a”:“2019-01-01”,“date.lt.b”:“2020-01-01”}@ssBarBee这个问题没有提到随机输入。他说:这项工作目前是通过对特定键按名称设置条件来执行的。-我假设它们有奇怪的输入:Dnice!它显然比投票结果最好的答案更具可读性:)