2017-10-10 5 views
0

コードスニペットで確認してテストできるように、私はgetjsonのデータをクエリして持ち込むこの関数を持っているので、同じデータを繰り返す必要はありません。jsonの繰り返しデータをフィルタリングする方法は?

繰り返し結果をフィルタリングして表示されないようにするにはどうすればよいですか?ここで

var cuit = "30712413871"; 
 
    $.getJSON("https://soa.afip.gob.ar/av/v1/vencimientos/" + cuit, function(result) { 
 
    for (var i = 0; i < result.data.length; i++) { 
 
     var fecha = result.data[i].vencimiento; 
 
     var periodo = fecha.substr(0, 7); 
 
     console.log(result.data[i].idImpuesto); 
 
     buscarChoice(result.data[i].idImpuesto, result.data[i].anticipoCuota, result.data[i].vencimiento, result.data[i].tipoOperacion, periodo); 
 
    } 
 
    }); 
 

 

 

 
function buscarChoice(num, op, venc, tipo, per) { 
 
    $.getJSON("https://soa.afip.gob.ar/parametros/v1/impuestos/", function(result) { 
 
    for (var i = 0; i < result.data.length; i++) { 
 
     if (result.data[i].idImpuesto == num) { 
 
     var table = document.getElementById("AFIP_edit"); 
 
     var row = table.insertRow(-1); 
 

 
     var cell1 = row.insertCell(0); 
 
     var cell2 = row.insertCell(1); 
 
     var cell3 = row.insertCell(2); 
 

 

 
     cell1.innerHTML = result.data[i].idImpuesto; 
 
     cell2.innerHTML = result.data[i].descImpuesto; 
 
     cell3.innerHTML = '<label class="hidden">AFIP</label>'; 
 
     } 
 
    } 
 
    }); 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.js"></script> 
 
<table id="AFIP_edit" class="table table-striped"> 
 
    <thead> 
 
    <tr> 
 
     <th class="text-center">#</th> 
 
     <th>Impuesto</th> 
 
     <th class="hidden">Agencia</th> 
 
    </tr> 
 
    </thead> 
 
    <tbody class="tb"> 
 

 
    </tbody> 
 
</table>

答えて

1

あなたが望むものを、次のですか?

var cuit = "30712413871"; 
 
var already_here = []; 
 
    $.getJSON("https://soa.afip.gob.ar/av/v1/vencimientos/" + cuit, function(result) { 
 
    for (var i = 0; i < result.data.length; i++) { 
 
if(already_here.includes(result.data[i].idImpuesto)) { 
 
continue; 
 
} 
 
     var fecha = result.data[i].vencimiento; 
 
     var periodo = fecha.substr(0, 7); 
 
     console.log(result.data[i].idImpuesto); 
 
     buscarChoice(result.data[i].idImpuesto, result.data[i].anticipoCuota, result.data[i].vencimiento, result.data[i].tipoOperacion, periodo); 
 
     already_here.push(result.data[i].idImpuesto); 
 
    } 
 
    }); 
 

 

 

 
function buscarChoice(num, op, venc, tipo, per) { 
 
    $.getJSON("https://soa.afip.gob.ar/parametros/v1/impuestos/", function(result) { 
 
    for (var i = 0; i < result.data.length; i++) { 
 
     if (result.data[i].idImpuesto == num) { 
 
     var table = document.getElementById("AFIP_edit"); 
 
     var row = table.insertRow(-1); 
 

 
     var cell1 = row.insertCell(0); 
 
     var cell2 = row.insertCell(1); 
 
     var cell3 = row.insertCell(2); 
 

 

 
     cell1.innerHTML = result.data[i].idImpuesto; 
 
     cell2.innerHTML = result.data[i].descImpuesto; 
 
     cell3.innerHTML = '<label class="hidden">AFIP</label>'; 
 
     } 
 
    } 
 
    }); 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.js"></script> 
 
<table id="AFIP_edit" class="table table-striped"> 
 
    <thead> 
 
    <tr> 
 
     <th class="text-center">#</th> 
 
     <th>Impuesto</th> 
 
     <th class="hidden">Agencia</th> 
 
    </tr> 
 
    </thead> 
 
    <tbody class="tb"> 
 

 
    </tbody> 
 
</table>

ところで、私が使用し.includes()メソッドのブラウザのサポートは素晴らしいではありませんので、私はアイテムを反復処理するforループを使用することをお勧めします。

+0

うん、ありがとうの男! – shios

0

array.filterを使用して、基本的なソリューションです。古いバージョンのIEをサポートする場合は、このメソッドを使用するにはpolyfilの塗りが必要です。

別のメモでは、あなたが探しているIDのデータだけを返すことができる/soa.afip.gob.ar/parametros/v1/impuestos/ API呼び出しのバージョンがありますか?そうでない場合は、そのAPIを一度呼び出してリストを保存する必要があります。そうすれば、データセット内の項目ごとに1 + 1ではなく、2つのajax呼び出ししか作成できません。

var cuit = "30712413871"; 
 
    $.getJSON("https://soa.afip.gob.ar/av/v1/vencimientos/" + cuit, function(result) { 
 
    var ids = {}; 
 
    var noDups = result.data.filter(function(item) { 
 
     if(ids[item.idImpuesto]){ 
 
     return false; 
 
     } 
 
     ids[item.idImpuesto] = true; 
 
     return true; 
 
    }); 
 
    for (var i = 0; i < noDups.length; i++) { 
 
     var fecha = noDups[i].vencimiento; 
 
     var periodo = fecha.substr(0, 7); 
 
     console.log(noDups[i].idImpuesto); 
 
     buscarChoice(noDups[i].idImpuesto, noDups[i].anticipoCuota, noDups[i].vencimiento, noDups[i].tipoOperacion, periodo); 
 
    } 
 
    }); 
 

 

 

 
function buscarChoice(num, op, venc, tipo, per) { 
 
    $.getJSON("https://soa.afip.gob.ar/parametros/v1/impuestos/", function(result) { 
 
    for (var i = 0; i < result.data.length; i++) { 
 
     if (result.data[i].idImpuesto == num) { 
 
     var table = document.getElementById("AFIP_edit"); 
 
     var row = table.insertRow(-1); 
 

 
     var cell1 = row.insertCell(0); 
 
     var cell2 = row.insertCell(1); 
 
     var cell3 = row.insertCell(2); 
 

 

 
     cell1.innerHTML = result.data[i].idImpuesto; 
 
     cell2.innerHTML = result.data[i].descImpuesto; 
 
     cell3.innerHTML = '<label class="hidden">AFIP</label>'; 
 
     } 
 
    } 
 
    }); 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.js"></script> 
 
<table id="AFIP_edit" class="table table-striped"> 
 
    <thead> 
 
    <tr> 
 
     <th class="text-center">#</th> 
 
     <th>Impuesto</th> 
 
     <th class="hidden">Agencia</th> 
 
    </tr> 
 
    </thead> 
 
    <tbody class="tb"> 
 

 
    </tbody> 
 
</table>

0

これにはArray.prototype.filterを使用できます。一致を追跡するために余分な配列を使用すると、二重の値をフィルタリングすることができます。下の例を見てください。

//array with data 
 
var data = [ 
 
{"id" : 1, "value" : "a"}, 
 
{"id" : 2, "value" : "b"}, 
 
{"id" : 3, "value" : "b"}, 
 
{"id" : 4, "value" : "c"}, 
 
{"id" : 5, "value" : "d"}, 
 
{"id" : 6, "value" : "a"} 
 
]; 
 

 
var map = []; 
 
result = data.filter(function(element){ 
 
    if (map.indexOf(element.value) === -1) 
 
    { 
 
     map.push(element.value); 
 
     return element; 
 
    } 
 
}); 
 

 
console.log(result);

関連する問題