在jQuery.serializeArray()中解析数字

时间:2017-01-11 03:51:05

标签: javascript jquery

我正在按如下方式序列化表单(受此answer启发):

function formToArray(jQueryObj){
var result = {};
var arr = jQueryObj.serializeArray();
$.each(arr, function(){
    result[this.name] = this.value;
});
return result;
}

返回{"input1_name":"value1", "input2_name": "42"}之类的对象。但是,有些输入是数字的,我希望它们返回数字而不是字符串。所以我想要的输出是{"input1_name":"value1", "input2_name": 42},数字不是引号。

如何使用jQuery / JavaScript实现这一目标?

谢谢,

5 个答案:

答案 0 :(得分:2)

如果您想将字符串转换回数字,可以使用Number()

$.each(arr, function(){
  if (!isNaN(this.value)) { //check if value is convertible to number
    result[this.name] = Number(this.value);
  } else {
    result[this.name] = this.value;
  }
});

答案 1 :(得分:1)

您可以手动检查值是否为数字。

$.each(arr, function(){
  if (!isNaN(this.value)) { //Check for non numbers negation
    result[this.name] = Number(this.value);
  } else {
    result[this.name] = this.value;
  }
});

答案 2 :(得分:1)

解析该值并使用isNaN

进行检查
function formToArray(jQueryObj){
var result = {};
var arr = jQueryObj.serializeArray();
$.each(arr, function(){
   result[this.name] =isNaN(parseInt(this.value))?this.value:parseInt(this.value);
});
return result;
}

答案 3 :(得分:1)

你可以试试这个:

var result = { };
$.each($('form').serializeArray(), function() {
    result[this.name] = Number(this.value) ? Number(this.value) : this.value;
});

答案 4 :(得分:1)

您可以使用"string" * 1强制转换为数字

比使用NumberparseInt更快 另外,如果您使用parseInt,请记住传递基数10 parseInt(number, 10)

var converted = this.value*1;
result[this.name] = isNaN(converted) ? this.value : converted;