MrBuffalo
MrBuffalo

Reputation: 167

Convert from Formdata object to javascript array

Good morning everyone, is there a method in Javascript to convert from

{ 
 Control[0].Eseguito: "true"
 Control[0].Id:"2"
 Control[0].Nota:""
 Control[1].Eseguito: "true"
 Control[1].Id:"2"
 Control[1].Nota:""
}

to javascript Array?

Control: Array(2)
0: {Id: '1', Eseguito: "true", Nota: ''}
1: {Id: '1', Eseguito: "true", Nota: ''}

EDIT

let myForm = document.getElementById('ControlForm');
var Controls = Object.fromEntries(new FormData(myForm).entries());

In mine ExecControl.cshtml i have situation like this, this is only a small snippet of codes

@{
    int Indice = 0;
}

@for (int i = 0; i < Model.ListControls.Length; i++)
{
    for (int j = 0; j < Model.ListControls[i].Controls.Length; j++)
    {
        ...
        <input type="text" style="width:100%;" name="Control[@Indice].Nota"/>
        input type="text" style="width:100%;" name="Control[@Indice].Id" value="@ListControls[i].Controls.Id"/>
        ...
    }
}

Upvotes: 0

Views: 390

Answers (1)

Okan Karadag
Okan Karadag

Reputation: 3045

you can convert only [index] type data to array with this method.

var formData = new FormData();
formData.append("Control[0].Id",1);formData.append("Control[0].Nota","Notaval");formData.append("Control[1].Id",2);formData.append("Control[1].Nota","Nott");


function toArray(data){
  var result = [];
  for (const [key,value] of data.entries()) {
      if(!key.includes("[") || !key.includes("]")) {return;}
      var indexVal =  key.indexOf("[") + 1;
      var indexVal2 =  key.indexOf("]");
      var index = parseInt(key.substring(indexVal,indexVal2))
      if(index == NaN){ return;}
      var field = key.split(".")[1]
      result[index] = {...result[index],[field]:value}
    }
   return result;
}
 console.log(toArray(formData));

Upvotes: 1

Related Questions