Javascript typescript:将字符串数组转换为自定义对象的逻辑

Javascript typescript:将字符串数组转换为自定义对象的逻辑,javascript,typescript,logic,typescript2.0,Javascript,Typescript,Logic,Typescript2.0,这是我的要求。我能够在java中达到某种程度,但我们需要将它转移到typescript(客户端) 注:以下输入仅供示例使用,可能会动态变化 输入 我们需要创建一个实用函数,它接受上述输入并返回如下输出 输出: 应该是字符串而不是对象或任何其他内容 "{ a { name, type }, b { city {name, zip } , desc }, c }" 非常感谢您的帮助。您可以这样做: var input=[“a.name”、“a.type”、“b.city.name”、“b.c

这是我的要求。我能够在java中达到某种程度,但我们需要将它转移到typescript(客户端)

注:以下输入仅供示例使用,可能会动态变化

输入

我们需要创建一个实用函数,它接受上述输入并返回如下输出

输出:

应该是字符串而不是对象或任何其他内容

"{ a { name, type }, b { city  {name, zip } , desc },  c }"

非常感谢您的帮助。

您可以这样做:

var input=[“a.name”、“a.type”、“b.city.name”、“b.city.zip”、“b.desc”、“c”];
var输出={};
对于(变量i=0;ilog(JSON.stringify(output))您可以这样做:

var input=[“a.name”、“a.type”、“b.city.name”、“b.city.zip”、“b.desc”、“c”];
var输出={};
对于(变量i=0;ilog(JSON.stringify(output))我看不出typescript在您的问题中扮演任何角色,但这里有一个解决方案,用于构造您请求的字符串。我首先将数组转换为具有这些属性的对象,然后使用一个函数将对象转换为字符串,格式与您的相同

const input=[“a.name”、“a.type”、“b.city.name”、“b.city.zip”、“b.desc”、“c”];
常量数组对象=(arr)=>{
返回arr.reduce((结果,val)=>{
常量路径=val.split('.');
设obj=结果;
path.forEach(键=>{
obj[key]=obj[key]|{};
obj=obj[键];
});
返回结果;
}, {});
}
常量objectToString=(对象,名称=“”)=>{
常量键=对象键(obj);
如果(keys.length==0){
返回名称;
} 
返回`${name}{${keys.map(k=>objectToString(obj[k],k)).join(',')}`;
}
常量arrayToString=arr=>objectToString(arrayToObject(arr));

log(arrayToString(输入))我看不出typescript在您的问题中扮演任何角色,但这里有一个解决方案,用于构造您请求的字符串。我首先将数组转换为具有这些属性的对象,然后使用一个函数将对象转换为字符串,格式与您的相同

const input=[“a.name”、“a.type”、“b.city.name”、“b.city.zip”、“b.desc”、“c”];
常量数组对象=(arr)=>{
返回arr.reduce((结果,val)=>{
常量路径=val.split('.');
设obj=结果;
path.forEach(键=>{
obj[key]=obj[key]|{};
obj=obj[键];
});
返回结果;
}, {});
}
常量objectToString=(对象,名称=“”)=>{
常量键=对象键(obj);
如果(keys.length==0){
返回名称;
} 
返回`${name}{${keys.map(k=>objectToString(obj[k],k)).join(',')}`;
}
常量arrayToString=arr=>objectToString(arrayToObject(arr));

log(arrayToString(输入))这里是另一个变体。诀窍是递归地解析字符串,并将中间结果存储在对象中

函数dotStringToObject(余数,父项){
if(余数.indexOf('.')=-1){
返回父项[余数]=真
}否则{
var subs=余数。拆分('.');
dotStringToObject(subs.slice(1).join('.'),(父[subs[0]]]| |(父[subs[0]]={})))
}
}
var输出={};
[“a.name”、“a.type”、“b.city.name”、“b.city.zip”、“b.desc”、“c”].forEach(函数(条目){
dotStringToObject(条目、输出)
});
var res=JSON.stringify(output).replace(/\“/gi)”).replace(/\:\true/gi').replace(/\s\s/gi');
console.log(res)

//打印:{a{name,type},b{city{name,zip},desc},c}
这是另一个变体。诀窍是递归解析字符串并将中间结果存储在对象中

函数dotStringToObject(余数,父项){
if(余数.indexOf('.')=-1){
返回父项[余数]=真
}否则{
var subs=余数。拆分('.');
dotStringToObject(subs.slice(1).join('.'),(父[subs[0]]]| |(父[subs[0]]={})))
}
}
var输出={};
[“a.name”、“a.type”、“b.city.name”、“b.city.zip”、“b.desc”、“c”].forEach(函数(条目){
dotStringToObject(条目、输出)
});
var res=JSON.stringify(output).replace(/\“/gi)”).replace(/\:\true/gi').replace(/\s\s/gi');
console.log(res)

//打印:{a{name,type},b{city{name,zip},desc},c}
{a{name,type},b{city{name,zip},desc},c}
这是什么?那不是javascript。你什么都没试过吗?
{a{name,type},b{city{name,zip},desc},c}
这是什么?那不是javascript。你什么都没试过吗?输出必须是字符串而不是objectOh!真的很难做到这一点:“JSON.stringify(output);”。这样做不会输出与asker期望的结果相同的结果输出必须是字符串而不是对象哦,伙计!真的很难做到这一点:“JSON.stringify(output);”。这样做将不会输出与asker expects相同的结果将数组转换为对象可以做到这一点,并使进一步的逻辑更容易。将数组转换为对象可以做到这一点,并使进一步的逻辑更容易。
"{ a { name, type }, b { city  {name, zip } , desc },  c }"