Estoy serializando un formulario de la siguiente manera (inspirado en esta respuesta):

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

Esto devuelve un objeto como {"input1_name":"value1", "input2_name": "42"}. Sin embargo, algunas de las entradas son numéricas, y quiero que devuelvan números en lugar de cadenas. Entonces mi salida deseada es {"input1_name":"value1", "input2_name": 42}, el número no entre comillas.

¿Cómo puedo lograr esto con jQuery / JavaScript?

Gracias

0
jeff 11 ene. 2017 a las 06:51

5 respuestas

La mejor respuesta

Si desea convertir la cadena de nuevo en un número, puede usar 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;
  }
});
3
hackerrdave 10 nov. 2017 a las 02:22

Analice el valor y verifíquelo con 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;
}
1
Sajan 11 ene. 2017 a las 03:58

Puedes probar esto:

var result = { };
$.each($('form').serializeArray(), function() {
    result[this.name] = Number(this.value) ? Number(this.value) : this.value;
});
1
Doanh 11 ene. 2017 a las 04:02

Puedes usar "string" * 1 para obligar a un número

Es más rápido que usar Number y parseInt
Además, si usa parseInt recuerde pasar la raíz 10 parseInt(number, 10)

var converted = this.value*1;
result[this.name] = isNaN(converted) ? this.value : converted;
1
aw2basc 11 ene. 2017 a las 04:30

Puede verificar manualmente si el valor es número.

$.each(arr, function(){
  if (!isNaN(this.value)) { //Check for non numbers negation
    result[this.name] = Number(this.value);
  } else {
    result[this.name] = this.value;
  }
});
1
squiroid 11 ene. 2017 a las 03:58