javascript - 使脚本适用于两种输入,可能吗?

标签 javascript jquery html

我正在编写这个脚本,将此作为输入:

{
   "success":true,
   "entities":[
      {
         "pais":{
            "id":2,
            "nombre":"Bolivia"
         }
      },
      {
         "pais":{
            "id":5,
            "nombre":"Colombia"
         }
      },
      {
         "pais":{
            "id":6,
            "nombre":"Costa Rica"
         }
      }
   ],
   "idToUpdate":"1"
}

并输出:玻利维亚、哥伦比亚、哥斯达黎加。以我之前提供的输入示例为例,这就是我调用该函数的方式:

showList('#distTd-' + data.idToUpdate, paisesFromEntity, data.entities);

没关系,但我现在也收到了这个输入:

{
   "success":true,
   "entities":{
      "id":5,
      "nombre":"dgdfgdfg",
      "direccion":"5654645",
      "telefono":"656546",
      "pais":[
         {
            "id":1,
            "nombre":"Argentina"
         },
         {
            "id":2,
            "nombre":"Bolivia"
         }
      ]
   }
}

这与第一个输入有点不同,因此这种情况下的脚本无法工作,因为缺少 pais 键。任何人都可以帮助我摆脱这个吗?我无法更改返回新 JSON 的服务器端。

var fullList = [];

$(document).ready(function(){
  var uniq = function (arr) {
        var ids = {};
        arr.forEach(function(obj) { 
          objPais = obj.pais.id === "undefined" ? obj.id : obj.pais.id;
          ids[objPais] = obj; 
        });
        return Object.keys(ids).map(function(id) {
          return ids[id];
        });
      };

  function showList(selector) {
      var items = [].slice.call(arguments, 1).filter(function(item) { return item; }),
        arr = fullList.concat.apply(fullList, items),
        list = uniq(arr),
        spans = list.map(function(val, i) { 
          return '<span id="' + val.pais.id +'">' + val.pais.nombre + '</span>';
        });

      if ($(selector).text().length >0) { 
        $(selector).append(', '); 
      }

      $(selector).append(spans.join(', '));
  }

  $("#btn1").on("click", function(){
    var arr1 = [{"pais":{"id":1,"nombre":"Country1"}},{"pais":{"id":2,"nombre":"Country2"}}],
        arr2 = [{"pais":{"id":1,"nombre":"Country1"}},{"pais":{"id":3,"nombre":"Country3"}},{"pais":{"id":4,"nombre":"Country4"}}],
        arr3 =[{"pais":[{"id":1,"nombre":"Argentina"},{"id":2,"nombre":"Bolivia"}]}];

    showList('#update', arr1, undefined, arr2, arr3);
  });

  $("#btn2").on("click", function(){
    var arr3 = [{"pais":{"id":5,"nombre":"Country5"}},{"pais":{"id":6,"nombre":"Country6"}}],
        arr4 = [{"pais":{"id":7,"nombre":"Country7"}},{"pais":{"id":8,"nombre":"Country8"}}];
    showList('#update', arr3, arr4);
  }); 
});

Here是一个jsBin工作代码

最佳答案

将第二种格式转换为第一种格式:

arr3copy = [];
for (var i = 0; i < arr3[0].pais.length; i++) {
    arr3copy.push({"pais":{"id":arr3[0].pais[i].id,"nombre":arr3[0].pais[i].nombre}});
};
arr3 = arr3copy;

关于javascript - 使脚本适用于两种输入,可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27217708/

相关文章:

jquery - Coldfusion Ajax-Request 抛出 JSON.parse 错误

javascript - 如何使用 javascript 检测浏览器选项卡刷新或关闭

javascript - 引用 .click() 仅在短时间内显示目的地

javascript - 在没有位置 :absolute 的情况下缩放不相对于其父级的 float div

javascript - 类实例上的嵌套属性

jquery - 针对包含 AjaxStart/Stop 的特定 ajax 调用

javascript - 如何在水平滑动器(idangero swiper)中启用垂直滚动?

javascript - 未捕获的类型错误 : Cannot read property 'length' of undefined on json_encode()

javascript - d3 强制拖动布局上的多个拖动功能

javascript - get 返回的对象是什么时候创建的?