将对象中的点单独保存为正确的类型

Saving the points from my object individually as their correct type

提问人:Dominic 提问时间:10/5/2023 最后编辑:Dominic 更新时间:10/5/2023 访问量:29

问:

这是我的第二个职位,我进入了实习的最后几天,这几乎是我要解决的最后一个问题和任务

我有一个图表,作为 agraphviz 文件,里面有很多项目 每个项目看起来都是这样的,有一些变化,但我们一直保持这个

Item1434 [label=<
template: "single_multiChoice"<br/>
text.de: "Wählen Sie Antwort A aus."<br/>
text.en: "Select answer A."<br/>
answers: [1]<br/>
endOfPhaseItem: true <br/>
>]

在我的打字稿文件中,我为他们的节点和连接整理了整个树,我的对象日志为

Item1434
single_multiChoice
{
template: '"single_multiChoice"',
'text.de': '"Wählen Sie Antwort A aus."',
'text.en': '"Select answer A."',
answers: '[1]',
endOfPhaseItem: 'true'
}

我的任务或问题是:

关键是标签中的字段应单独保存在属性对象中。因此,例如,在示例中应为“freitextTemplate”。数据类型应该是正确的,例如数组或数字。attributes.template

这一切都是为了端到端的柏树测试而完成的,以检查树是否正常工作以及后面是否正确。

到目前为止,我如何登录我的控制台:

const attributes: { [line: string]: string | boolean | string[] | number[] } ={};
splitting.forEach((row) => {
const key = row.substring(0, row.indexOf(":"))
const value = row.substring(row.indexOf(":") +1).trim()
attributes[key] = value
}); 
console.log(attributes);

由于与我在该项目上密切合作的联系人正在出差,而我现在独自一人,因此我的进展非常缓慢

如果您需要更多信息,我可以为您提供。

感谢您的任何帮助或提示或想法,我有点不知所措

我试图将每一行都定义为常量,但我可能做错了或不完整,所以我暂时删除了所有内容。

JavaScript TypeScript 对象 映射

评论


答:

0赞 Chintan Dhokai 10/5/2023 #1

以下是我们将如何根据格式处理不同的数据类型:

  • 如果该值用双引号括起来,我们将引号删除到 将其转换为字符串。
  • 如果值为 'true' 或 'false',则将其转换为布尔值。
  • 如果该值用方括号括起来,则将其解析为 JSON 数组。
  • 如果值是数字,我们使用 parseInt 将其解析为整数。
  • 否则,我们将其视为字符串。
const data = `
template: "single_multiChoice"
text.de: "Wählen Sie Antwort A aus."
text.en: "Select answer A."
answers: [1]
endOfPhaseItem: true
`;

const attributes: Record<string, string | boolean | string[] | number> = {};

data.trim().split('\n').forEach((row) => {
  const [key, value] = row.split(':').map((item) => item.trim());
  if (value.startsWith('"') && value.endsWith('"')) {
    attributes[key] = value.slice(1, -1); // Remove double quotes for strings
  } else if (value === 'true' || value === 'false') {
    attributes[key] = value === 'true'; // Convert to boolean
  } else if (value.startsWith('[') && value.endsWith(']')) {
    attributes[key] = JSON.parse(value); // Parse arrays
  } else if (/^\d+$/.test(value)) {
    attributes[key] = parseInt(value, 10); // Parse integers
  } else {
    attributes[key] = value;
  }
});

console.log(attributes);