Как взять имя свойства и значение и создать новый объект

#javascript #jquery

#javascript #jquery

Вопрос:

я играю с некоторыми формами, используя плагин проверки jquery

Сейчас я пытаюсь отправить значение формы на свой сервер, но мне нужно отправить эту информацию в формате JSON.. итак, в моем методе submitHandler я делаю это…

 var formData = JSON.stringify($("#form").serializeArray());
  

но теперь это содержит переменная FormData..

 [ { name: 'nombre', value: 'ffgsdfgdfs' },
  { name: 'apellidos', value: 'gsdfgsdfg' },
  { name: 'email', value: 'dsfgg@gkfgd.com' },
  { name: 'usuario', value: 'fgsd' },
  { name: 'password', value: 'dksmfklsdm43' },
  { name: 'empresa', value: 'fkdmflksdmfkl' },
  { name: 'cif', value: 'mkfsdmfklsdmfkl' },
  { name: 'telefono', value: 'mfklsdmfklmsdfkl' },
  { name: 'direccion', value: 'mfklsdfmsdklfm' },
  { name: 'pais', value: 'klfmsdklfmsdklmf' },
  { name: 'localidad', value: 'kfmsdklfmsdklfm' },
  { name: 'cp', value: 'kfmsdklfmsdklfml' },
  { name: 'dominio', value: 'sde' },
  { name: 'termino', value: 'on' } ]
  

Но это не тот формат, который мне нужен, мне нужно что-то вроде…

 formData ={
  nombre: 'ffgsdfgdfs',
  apellidos: 'gsdfgsdfg' ,
  email: 'dsfgg@gkfgd.com' ,
  usuario: 'fgsd',
  //.... etc etc
 } //this is what i would like to have
  

как я могу это сделать? я пытался с помощью for в…. но я не смог получить ожидаемый результат

Комментарии:

1. вам нужен объект для каждой пары?

2. было бы неплохо иметь объект, который содержит все объекты, я отредактирую свой вопрос

3. фактический тип данных невозможен, для любого значения необходим ключ в объекте. мой вопрос был в том, хотите ли вы один объект с несколькими свойствами?

Ответ №1:

Вы могли бы сопоставить новые объекты и назначить все одному объекту.

 var data = [{ name: 'nombre', value: 'ffgsdfgdfs' }, { name: 'apellidos', value: 'gsdfgsdfg' }, { name: 'email', value: 'dsfgg@gkfgd.com' }, { name: 'usuario', value: 'fgsd' }, { name: 'password', value: 'dksmfklsdm43' }, { name: 'empresa', value: 'fkdmflksdmfkl' }, { name: 'cif', value: 'mkfsdmfklsdmfkl' }, { name: 'telefono', value: 'mfklsdmfklmsdfkl' }, { name: 'direccion', value: 'mfklsdfmsdklfm' }, { name: 'pais', value: 'klfmsdklfmsdklmf' }, { name: 'localidad', value: 'kfmsdklfmsdklfm' }, { name: 'cp', value: 'kfmsdklfmsdklfml' }, { name: 'dominio', value: 'sde' }, { name: 'termino', value: 'on' }],
    result = Object.assign({}, ...data.map(({ name, value }) => ({ [name]: value })));

console.log(result);  
 .as-console-wrapper { max-height: 100% !important; top: 0; }  

Ответ №2:

Другой альтернативой является использование Array.reduce(), например:

 const input = [
  {name: 'nombre', value: 'foo'},
  {name: 'apellidos', value: 'bar bar'},
  {name: 'email', value: 'foo@bar.com'},
  {name: 'usuario', value: 'foobar'}
];

let res = input.reduce((acc, {name, value}) => (acc[name] = value, acc), {});

console.log("Result is:", res);  
 .as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}  

Ответ №3:

 var data = [{ name: 'nombre', value: 'ffgsdfgdfs' },
{ name: 'apellidos', value: 'gsdfgsdfg' },
{ name: 'email', value: 'dsfgg@gkfgd.com' },
{ name: 'usuario', value: 'fgsd' }];
var jsonData = {};
for (var i = 0; i < data.length; i  ) {
    jsonData[data[i].name] = data[i].value
}