Javascript 不使用eval()从循环字符串创建JSON对象树

Javascript 不使用eval()从循环字符串创建JSON对象树,javascript,Javascript,我有一段代码,它循环遍历一个字符串,以JSON对象的形式生成一棵树。每次到达某个字符时,数组应降低一个级别。我能做到这一点的唯一方法是使用eval()。通过生成类似以下内容的内容,我重新创建了在自定义push函数中向下移动一行所需的索引JSON\u OBJECT[2][8]。push(value)eval()不仅是一个安全问题,而且速度非常慢 下面我有一个类似的脚本,其中我使用了空格作为特定字符。运行1000个随机生成的填充词时,脚本需要约1000毫秒。只需删除eval并将其替换为一个json.

我有一段代码,它循环遍历一个字符串,以JSON对象的形式生成一棵树。每次到达某个字符时,数组应降低一个级别。我能做到这一点的唯一方法是使用
eval()
。通过生成类似以下内容的内容,我重新创建了在自定义push函数中向下移动一行所需的索引
JSON\u OBJECT[2][8]。push(value)
eval()
不仅是一个安全问题,而且速度非常慢

下面我有一个类似的脚本,其中我使用了空格作为特定字符。运行1000个随机生成的填充词时,脚本需要约1000毫秒。只需删除eval并将其替换为一个
json.push(value)
脚本最多需要3毫秒

我知道
eval()
并不是一直在使用,但它必须是一个重要部分。速度是脚本中的一个重要因素,1000个单词与脚本将要处理的内容相差不远。有没有办法不用
eval()
就能做到这一点

这是剧本

var string='lorem ipsum door sit amet concertetur adipsiting elit ut',
json=[],
levelIndex=[];
for(设i=0;i'+JSON.stringify(JSON))当然可以。试试这个:

函数x(字符串、标记){ var根=[]; 无功电流=根; 对于(变量i=0;i当然可以。试试这个:

函数x(字符串、标记){ var根=[]; 无功电流=根; 对于(变量i=0;ilog(JSON.stringify(result))您可以尝试以下方法:

函数深度(节点、分隔符){
返回节点
.拆分(分隔符)
.reduceRight((结果,元素)=>{
result.unshift(…element.split(“”);
返回[结果];
}, []);
}
var结果=深度(“lorem ipsum dolor sit amet concertetur adipsite elit ut”和“);

log(JSON.stringify(result))您可以尝试以下方法:

函数深度(节点、分隔符){
返回节点
.拆分(分隔符)
.reduceRight((结果,元素)=>{
result.unshift(…element.split(“”);
返回[结果];
}, []);
}
var结果=深度(“lorem ipsum dolor sit amet concertetur adipsite elit ut”和“);

log(JSON.stringify(result))延迟到第三方,但这是通过递归实现的,而且数组是通过引用传递的,而不是通过值传递的

var string=“Lorem ipsum door sit amet concertetur adipsite elit ut”;
让myjson=[];
让recursiveDrillandAppend=(数组,值)=>{
如果(!Array.isArray(Array))返回true;
if(recursiveDrillandAppend(数组[array.length-1],value))
array.push(值);
};
for(设i=0;idocument.write(“完成的数组:
”+JSON.stringify(myjson)+“
延迟到第三方,但这是通过递归实现的,而且数组是通过引用传递的,而不是通过值传递的

var string=“Lorem ipsum door sit amet concertetur adipsite elit ut”;
让myjson=[];
让recursiveDrillandAppend=(数组,值)=>{
如果(!Array.isArray(Array))返回true;
if(recursiveDrillandAppend(数组[array.length-1],value))
array.push(值);
};
for(设i=0;idocument.write(“完成的数组:
”+JSON.stringify(myjson)+“
见,谢谢。我知道一定有更好的办法。我的第一个想法是按照您的方式来做,但我认为分配一个
当前
不会在更改后更新
。谢谢。我知道一定有更好的办法。我的第一个想法是按照你的方式来做,但我认为分配一个
当前
不会在更改后更新
。谢谢你的回答。代码非常简洁,但似乎比AKX的答案慢很多。谢谢你的回答。代码非常简洁,但似乎比AKX的答案慢得多。