Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中将字符串转换为类型化数组_Javascript_Typed Arrays - Fatal编程技术网

在Javascript中将字符串转换为类型化数组

在Javascript中将字符串转换为类型化数组,javascript,typed-arrays,Javascript,Typed Arrays,我有一个字符串,应该解析为JSON,然后转换为Float32Array。 字符串如下所示: {"vertices":"[-1.0, -1.0, -1.0, -1.0, -1.0, 0.0, 1.0, -1.0, 0.0]"} 数组应分配给变量,例如: mesh.vertices = new Float32Array([-1.0, -1.0, -1.0, -1.0, -1.0, 0.0, 1.0, -1.0, 0.0]); 如何转换字符串,使数组由浮点数组成? 出于安全原因,我不想使用eval

我有一个字符串,应该解析为JSON,然后转换为Float32Array。 字符串如下所示:

{"vertices":"[-1.0, -1.0, -1.0, -1.0, -1.0, 0.0, 1.0, -1.0, 0.0]"}
数组应分配给变量,例如:

mesh.vertices = new Float32Array([-1.0, -1.0, -1.0, -1.0, -1.0, 0.0, 1.0, -1.0, 0.0]);
如何转换字符串,使数组由浮点数组成? 出于安全原因,我不想使用eval()。

您可以使用:

这是假设你的意思是:

{"vertices":[-1.0, -1.0, -1.0, -1.0, -1.0, 0.0, 1.0, -1.0, 0.0]}
如果JSON真的如您所说(FWIW有点奇怪),那么它应该是:

mesh.vertices = new Float32Array(JSON.parse(JSON.parse(myString).vertices));

使用
JSON.parse
安全地解析JSON数据。参见

我仍然建议您使用本机的
JSON
解析器(如其他人所述),但这里有一个非常简单且有限的实现:

var stringToParse = "{vertices:[-1.0, -1.0, -1.0, -1.0, -1.0, 0.0, 1.0, -1.0, 0.0]}";

Object.prototype.simpleParse = function() {
    if (!(this instanceof String)) throw "Type mismatch";
    var re = /(\w+)[^:]+:\[([^\]]+)\]/g;
    var keyvalues = re.exec(this.valueOf());
    var key = keyvalues[1];
    var values = keyvalues[2].split(",");
    var arr = [];
    for (val in values) {
        var currentValue = (/-?\d+(.\d+)?/).exec(values[val])[0];
        arr.push(currentValue);
    }
    arr.pop();
    ret = {};
    ret[key] = new Float32Array(arr);
    return ret;
}

console.log(stringToParse.simpleParse());
​演示:

您的意思是作为JSON解析还是从JSON解析?也就是说,你有JSON,你想把它转换成JavaScript对象。可能是重复的,谢谢!我将使用{“顶点”:[-1.0,-1.0,-1.0,-1.0,-1.0,0.0,1.0,-1.0,0.0]},正如您所建议的那样。使用“[array,items]”是有充分理由的。当使用simplejson和python时,它保持json的可读性。一行或一列中有10000个项目会有所不同。
var stringToParse = "{vertices:[-1.0, -1.0, -1.0, -1.0, -1.0, 0.0, 1.0, -1.0, 0.0]}";

Object.prototype.simpleParse = function() {
    if (!(this instanceof String)) throw "Type mismatch";
    var re = /(\w+)[^:]+:\[([^\]]+)\]/g;
    var keyvalues = re.exec(this.valueOf());
    var key = keyvalues[1];
    var values = keyvalues[2].split(",");
    var arr = [];
    for (val in values) {
        var currentValue = (/-?\d+(.\d+)?/).exec(values[val])[0];
        arr.push(currentValue);
    }
    arr.pop();
    ret = {};
    ret[key] = new Float32Array(arr);
    return ret;
}

console.log(stringToParse.simpleParse());