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

Convert string to typed array in Javascript

本文关键字:类型化 数组 转换 字符串 Javascript      更新时间:2023-09-26

我有一个字符串,应该解析为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.parse:

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

这是假设你的意思是:

{"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数据。看见https://developer.mozilla.org/En/Using_native_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());

​演示:http://jsfiddle.net/mKWGH/