js функция, которая создала указанный c объект, принимающий значения из SerializeArray - PullRequest
0 голосов
/ 06 марта 2020

У меня есть этот массив, который я беру из функции serializeArray(), и я хочу передать этот ключ / значения конкретному c js объекту.

У меня есть этот результат из $("selector :pseudoSelector").serializeArray()

и дает мне это:

[
  {
    "name": "Address",
    "value": "Calle pizzarro 56"
  },
  {
    "name": "1",
    "value": "83"
  },
  {
    "name": "3",
    "value": "340"
  },
  {
    "name": "5",
    "value": "340"
  },
  {
    "name": "7",
    "value": "hi how are you?"
  },
  {
    "name": "latitud",
    "value": "87798"
  },
  {
    "name": "longitude",
    "value": "-8,208914"
  }
]

Затем я хочу преобразовать эти данные в объект, подобный этому:

{
  "id": 0, //this id is the last id on this list plus 1(so first is 0 next one 1 and so on..) 
  "address": "Calle pizzarro 56",
  "appliesOn": 1, // also default value so dont worry
  "areas": [
    {
      "id": 83,
      "areaLevelId": 1,
      "name": "Portugal",
      "areaPosition": null,
      "parentAreas": [],
      "childAreas": []
    },
    {
      "id": 340,
      "areaLevelId": 3,
      "name": "Algarve",
      "areaPosition": null,
      "parentAreas": [],
      "childAreas": []
    },
    {
      "id": 340,
      "areaLevelId": 5,
      "name": "Albufeira",
      "areaPosition": null,
      "parentAreas": [],
      "childAreas": []
    },
    {
      "id": 12485,
      "areaLevelId": 7,
      "name": "hi how are you?",
      "areaPosition": {
        "latitude": 234,
        "longitude":79879
      },
      "parentAreas": [],
      "childAreas": []
    }
  ],
  "recordStatus": 1 //it handles by other way so for now 1 is ok
}

Проблема это с областями, когда имя == 1 значение переходит в areaLevelId = 1 и так далее. Когда areaLevelId = 7, возникает исключение, он принимает latitude и longitude и создает массив с этим. Что я делал до сих пор, так это:

function objectifyForm(fields) {

        var returnArray = {};

        returnArray["areas"] = [];

        jQuery.each(fields, function (i, field) {

            if (!isNaN(field.name) && field.value != "") {

                returnArray["areas"].push({
                    "id": (field.value.toLowerCase()),
                    "areaLevelId": (field.name)
                })

            } else if (field.name == "latitud" && field.name == "longitude") {
                //returnArray["areas"][3].push({
                //    returnArray["areas"]["areaPosition"] = [];
                //})
            } else {
                returnArray[field.name.toLowerCase()] = field.value + "";
            }
        });
        return returnArray;
    }

Но это неправильно, потому что я не уверен, как продолжать идти. В первый раз я сделал что-то вроде;

1) взять значения из формы с помощью serializeArray()

2) затем создать функцию, которая помещает эту информацию в объект с конкретной формой.

3) pu sh этот массив в глобальный массив

pd: parentAreas, childAreas всегда пусто , а areaPosition имеет latitude и longitude при areaLevelId == 7 Как Я мог бы достичь этого, большое спасибо в продвинутом.

1 Ответ

1 голос
/ 06 марта 2020

Вы можете сделать что-то вроде следующего:

var arr = [
  { name: "Address", value: "Calle pizzarro 56" },
  { name: "1", value: "83" },
  { name: "3", value: "340" },
  { name: "5", value: "340" },
  { name: "7", value: "hi how are you?" },
  { name: "latitud", value: "87798" },
  { name: "longitude", value: "-8,208914" }
];

function objectifyForm(fields) {
  var address = fields.find(function(item) {
    return item.name === "Address";
  });
  var latitude = fields.find(function(item) {
    return item.name === "latitud";
  });
  var longitude = fields.find(function(item) {
    return item.name === "longitude";
  });
  var areas = fields.filter(function(item) {
    return (
      item.name !== "Address" &&
      item.name !== "latitud" &&
      item.name !== "longitude"
    );
  });

  var result = {
    id: 0,
    address: address.value,
    appliesOn: 1,
    recordStatus: 1
  };

  result.areas = areas.map(function(area) {
    return {
      id: area.value,
      areaLevelId: area.name,
      name: "Whatever",
      areaPosition:
        area.name === "7"
          ? { latitude: latitude.value, logitude: longitude.value }
          : null,
      parentAreas: [],
      childAreas: []
    };
  });

  return result;
}

var result = objectifyForm(arr);

console.log(result);

Я немного упростил функцию objectifyForm, выделив соответствующую информацию перед заполнением массива areas, чтобы с ним было легче работать.

Кроме того, я не уверен, откуда вы получаете areas[index].name, но я оставлю это на ваше усмотрение.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...