Concat 对象不起作用,或者我需要将值转换为正确的格式

Concat objects is not working or I need to convert values to the right format?

本文关键字:转换 格式 不起作用 对象 或者 Concat      更新时间:2023-09-26

我需要从第一个$.post获得data.entities.paises,并从第二个$.post data.entities concat(),这就是我的做法:

  var paisesFromEntity;
  $.post(Routing.generate('productoGuardarPasoCinco'), $form.serialize(), 'json').done(function (data, textStatus, jqXHR) {
    if (data.entities !== "undefined" || data.entities != "") {
      paisesFromEntity = data.entities.paises;
    }
  }).fail(function () {
      return false;
  });
  var returnList = function (entities) {
      if (entities.length > 0) {
          var items = [];
          entities.forEach(function (value, index, array) {
              items.push(value.pais);
          });
          return items.join(', ');
      }
  };
  var fullList = [];
  $.post(Routing.generate('agregarPaisesDistribuidor'), $form.serialize(), 'json').done(function (data, textStatus, jqXHR) {
      fullList = fullList.concat(data.entities, JSON.stringify(paisesFromEntity));
      var displayText = returnList(fullList);
      $('#td-' + data.idToUpdate).html(displayText);
  }).fail(function () {
      return false;
  });

将此输出作为第一$.post()

{
   "success":true,
   "entities":{
      "id":13,
      "nombre":"dsdsfsdfsd",
      "direccion":"fsdfsdfsdf",
      "telefono":"4234234",
      "paises":[
         "Bolivia",
         "Costa Rica",
         "Ecuador"
      ]
   }
}

而这个为第二个$.post()

{
   "success":true,
   "entities":[
      {
         "pais":"Colombia"
      },
      {
         "pais":"Panam'u00e1"
      },
      {
         "pais":"Ciudad del Vaticano"
      }
   ],
   "idToUpdate":"14"
}

displayText 中的预期输出应该是这样的:Bolivia, Costa Rica, Ecuador, Colombia, Panam'u00e1, Ciudad del Vaticano但我得到这个输出而不是Colombia, Panamá, Ciudad del Vaticano,并且某些值缺少 data.entities.paises 中的值。我怀疑错误是data.entities.paisesdata.entities格式不同,并且returnList上的函数没有完成工作上帝,那么concat()函数或data.entities.paises格式的错误在哪里?如果是第二个,如何在连接两者之前转换为与data.entities相同的格式?

您这里有 3 个问题。

首先,您可能会遇到时间问题,因为无法保证第一个$.post会在第二个之前完成。您需要确保在入住前两者都已完成。您有几种方法可以做到这一点 - 链接,Caolan的异步库 https://github.com/caolan/async,检查的回调等 - 但这不是您在这里要问的。

第二个

问题是第一个响应是一个字符串数组;第二个是你想要其值的对象数组,你需要将它们组合在一起。

第三个问题是您将字符串数组转换为 JSON 字符串,这也不起作用。

试试这个。

// assuming data.entities is an array of objects, and paisesFromEntity is an array of strings
fullList = fullList.concat(paisesFromEntity, getValues(data.entities));

getValues()功能

getValues = function(arr){
  var ret = [], i;
  for (i=0; i<arr.length; i++) {
     ret.push(arr[i].pais);
  }
  return(ret);
};

如果你在jQuery中这样做,你可以使用

getValues = function(arr){
  var ret = [];
  $.each(arr,function(i,entry) {
    ret.push(entry.pais);
  });
  return(ret);
};

如果您可以使用 lodash 或下划线,则使用弹拨会更容易。