首页 > 解决方案 > 将字符串转换为对象数组

问题描述

目前我有这个字符串:

"Hello, I'm <%first%> <%last%>, and I <3 being a <%occupation%>. I am > blah";

如何将它分成一个如下所示的对象数组:

[
  { type: 'string', value: 'Hello, I'm ' },
  { type: 'token', value: 'first' },
  { type: 'string', value: ' ' },
  { type: 'token', value: 'last' },
  { type: 'string', value: ', and I <3 being a ' },
  { type: 'token', value: 'occupation' },
  {type: 'string', value: 'I am > blah'}
]

字符串的模式是,如果我们找到一个看起来像这样的单词:<%word%>,那么我们将它作为一个类型为 token 的对象放入数组中。否则,我们将其作为类型字符串放入。我的问题是我们如何在代码中实现它。

我很难形成将成为valuekey的短语value。下面是我尝试实现的代码,但它是错误的。我的想法是有一个单词变量,它是空的,当它通过字符串时,它会连接单词以形成阶段。一旦它看到它在 and 之间<%%>它将被赋予一个类型token并推送到arrStr数组中。

但是有两个问题:1)似乎使用此代码,正在生成从“H”到“He”到“Hel”到“Hell”到“Hello”的字符串的每次迭代。2)它似乎从不接触令牌。3) "hello" 中的第一个 "h" 以某种方式被省略了。

如何在不使用正则表达式的情况下做到这一点?

标签: javascriptarraysstringobjectiteration

解决方案


var str = "Hello, I'm <%first%> <%last%>, and I <3 being a <%occupation%>. I am > blah";
var arr = str.split('<%');
var final = [], vala, thetype;
arr.forEach(val => {
 vala=val.split('%>');
 thetype='string';
 if (vala.length>0) thetype='token';
 final.push({type: thetype, value: vala[0]});
})

推荐阅读