使脚本适用于两种输入,是否可行?

时间:2014-11-30 20:12:03

标签: 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工作代码

1 个答案:

答案 0 :(得分:1)

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

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;