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)我也愿意操纵字段"幅度"存储在数据库中的格式,以便我的整体设计变得更简单.
建议欢迎
由于您可能使用服务器端语言处理数据,因此只需生成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)