我正在编写这个脚本,将此作为输入:
{
"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/