Javascript:ParseInt计算的变换矩阵值返回NaN

时间:2015-06-26 13:40:19

标签: javascript parsing transform

所以我有这个transform计算样式

matrix3d(1.5, -7, 2, 0, 7, 1.5, 0, 0, -3, 1, 1, 0, 100, 0, 0, 1)

接下来我想转换为数字数组

var s = window.getComputedStyle(element);
var mattrixArray = s.replace(/3d|matrix|(|)|\s|/g,'').split(','), l = mattrixArray.length;
for (var i=0; i<l; i++){
  mattrixArray[i] = parseInt(mattrixArray[i],10);
}
console.log(mattrixArray)

返回

[NaN, -7, 2, 0, 7, 1.5, 0, 0, -3, 1, 1, 0, 100, 0, 0, 1]

如果我没有parseInt(value)它显示正确,但它是string,该怎么办?

2 个答案:

答案 0 :(得分:3)

您没有逃脱正则表达式中的()

/3d|matrix|(|)|\s|/g
           ^ ^

如果你纠正这个是这样的:

/3d|matrix|\(|\)|\s|/g

正则表达式也正确地删除了parantheses,从而产生了一个可以成功插入parseIntparseFloat的数组:

["1.5", "-7", "2", "0", "7", "1.5", "0", "0", "-3", "1", "1", "0", "100", "0", "0", "1"]

答案 1 :(得分:0)

你的正则表达式根本不替换括号。需要一些逃脱!

var s = window.getComputedStyle(element);
var mattrixArray = s.replace(/3d|matrix|\(|\)|\s|/g,'').split(',')
  , l = mattrixArray.length;
for (var i=0; i<l; i++){
    mattrixArray[i] = parseFloat(mattrixArray[i],10);
}
console.log(mattrixArray);

同时使用parseFloat代替parseInt,这样您就可以获得实际值而不是舍入值。

或者你可以这样做:

var mattrixArray = s.split("(")[1].split(")")[0].split(',')

编辑:刚刚测试过,分裂3次比使用正则表达式快4倍。