eval()的用法在这里是否合理?

pap*_*del 4 javascript eval

JavaScript对象data有一个属性'amplitudeitude',它是来自服务器的字符串串联的位掩码数组.

var data = {
  "amplitudes":           
  "[1,1,1,4,1,1],[1,1,1,1,1,1],[1,1,4,1,9,1],[1,1,9,1,16,1],[1,32,1,1,1,9],[4,4,4,1,1,1]"
}
Run Code Online (Sandbox Code Playgroud)

.

这需要分解为六个独立的数组.我正在使用以下方式组合split()eval()完成它:

var amplitudes = [];
amplitudes = data.amplitudes.split("],[");
for(var i=0;i<amplitudes.length;i+=1){
    (i+1)%2>0 ? amplitudes[i] = amplitudes[i] + "]" : amplitudes[i] = "[" + amplitudes[i];
    amplitudes[i] = eval(amplitudes[i]);
}
Run Code Online (Sandbox Code Playgroud)

问题


1)有更优雅有效的方法吗?我对eval()的使用不太满意,但感觉分裂比正则表达更有效吗?我还没有运行基准测试.

2)我也愿意操纵字段"幅度"存储在数据库中的格式,以便我的整体设计变得更简单.

建议欢迎

Thi*_*ter 6

由于您可能使用服务器端语言处理数据,因此只需生成JavaScript数组即可.如果服务器端代码中有数组,请使用JSON编码器构建JavaScript对象/数组.

var data = {
  "amplitudes": [[1,1,1,4,1,1], [1,1,1,1,1,1], [1,1,4,1,9,1], [1,1,9,1,16,1], [1,32,1,1,1,9], [4,4,4,1,1,1]]
}
Run Code Online (Sandbox Code Playgroud)

如果您无法更改从服务器获得的内容,则可以使用eval以更简单的方式执行此操作:

var str = "[1,1,1,4,1,1],[1,1,1,1,1,1],[1,1,4,1,9,1],[1,1,9,1,16,1],[1,32,1,1,1,9],[4,4,4,1,1,1]";
var arr = eval('[' + str + ']');
Run Code Online (Sandbox Code Playgroud)

  • @papdel:除非我错过了什么,否则ThiefMaster推荐使用`JSON`.只有当你不能切换到使用`JSON`时,才应该使用他的`eval()`解决方案. (2认同)