Подготовка объекта в JS перед отправкой на сервер? - PullRequest
1 голос
/ 17 апреля 2019

Я пытаюсь подготовить объект для POST на моем сервере для хранения некоторой информации.Этот объект требует от меня выполнения нескольких запросов GET в зависимости от того, как пользователь выбирает сбор всей информации, необходимой для POST.Я понял, что мне нужно изменить объект, чтобы на самом деле получить их в правильные пары значений в JSON, и я не уверен, есть ли лучший способ сделать это.

Я показываю это только впростой способ, но на самом деле есть 6-7 очень длинных объектов, и все они должны быть изменены и помещены в один JSON.Серверный API написан таким образом, чтобы принимать входные данные, и я ничего не могу сказать по этому поводу.

Например: что я получаю от запросов

object1: {
 id: 1,
 name: "table",
 price: 3499
}

object2: {
 id: 5,
 lat: 48.56,
 lng: -93.45,
 address: "1080 JavaScript Street"
}

Что мне нужночтобы стать:

data: {
 map_id: 5,
 product_id: [1],
 product_name: ["table"],
 product_price: [3499],
 start_lat: 48.56,
 start_lng: -93.45,
 start_address: "1080 JavaScript Street"
}

Пока что я просто делаю тупой способ просто сшить их вместе, я просто написал это здесь, чтобы это не сработало, но должно логически показать, что я думаю:

prepareDataToSend = (object1, object2) => {
 //exclude uninit handling, and newObject init for arrays
 let newObject = {};
 newObject.map_id = object2.id;
 //if there are more of object1 then I have to loop it
 newObject.product_id.push(object1.id);
 newObject.product_name.push(object1.name);
 ...etc
}

Я получаю искомый результат, но это кажется действительно неэффективным и глупым. Не говоря уже о том, что это кажется очень недостижимым.Есть лучший способ сделать это?Я чувствую, что есть некоторые техники, которые мне не хватает.

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

Вы можете использовать ES6 разрушение объекта .


let object1 = {
 id: 1,
 name: "table",
 price: 3499
};

let object2 = {
 id: 5,
 lat: 48.56,
 lng: -93.45,
 address: "1080 JavaScript Street"
};

// declaring the new object with the new properties names.
let newObject = {
  map_id: '',
  product_id: [],
  product_name: [],
  product_price: [],
  start_lat: '',
  start_lng: '',
  start_address: ''
};

// destructuring "object1"
({id: newObject.product_id[0],
  name: newObject.product_name[0],
  price: newObject.product_price[0]} = object1);

// destructuring "object2"
({id: newObject.map_id,
  lat: newObject.start_lat,
  lng: newObject.start_lng,
  address: newObject.start_address} = object2);

console.log(newObject)

Результат:

{
  map_id: 5,
  product_id: [1],
  product_name: ["table"],
  product_price: [3499],
  start_address: "1080 JavaScript Street",
  start_lat: 48.56,
  start_lng: -93.45
}
0 голосов
/ 18 апреля 2019

Звучит так, будто вам нужно что-то вроде функции JQuery или Angular extension (), но с поворотом для подкартирования клавиш.

https://api.jquery.com/jquery.extend/

Вот простая версия, настроенный для ваших нужд.

//merge the N objects.  Must have a "prefix" property to configure the new keys
var extendWithKeyPrefix = function() {
  if (arguments.length == 0) return; //null check
  var push = function(dst, arg) {
    if (typeof arg != 'undefined' && arg != null) { //null check
      var prefix = arg["prefix"]; //grab the prefix
      if (typeof prefix != 'undefined' && prefix != null) { //null check
        for (var k in arg) { //add everything except for "prefix"
          if (k != "prefix") dst[prefix+k] = arg[k]; 
        }
      }
    }
    return dst;
  }
  arguments.reduce(push);
}

Обратите внимание, что значение последнего объекта, использующего определенный ключ, будет выиграно.Например, обратите внимание, что «id» в объединенном объекте - 2, а не 1.

var object1 = {id: 1, unique1: "One", prefix: "product_"};
var object2 = {id: 2, unique2: "Two", prefix: "product_"};
var object3 = {id: 3, unique3: "Three", prefix: "office_"};
var merged = {};

extend(merged, object1, object2);

// value of merged is...
// { product_id: 2, 
//   product_unique1: "One", 
//   product_unique2: "Two", 
//   office_id: 3, 
//   office_unique3: "Three"
// }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...