在 table 中按价格对多个 API 进行排序
Sorting multiple API's by price in a table
这会让人感到困惑,但可能是一个简单的答案。
我有两个 api 格式的 json 链接。将数据拉入 table.
目前,所有 API1 都先放入 table,然后再放入 API2。
两个 api 的价格都采用 £XX.XX 格式。
我要找的是按价格排序的table。因此,例如 API1 的前 2 个结果是最便宜的,然后是 API2,然后是 API1,依此类推。
我把我的代码贴在下面给你看看。
Table.html
<table class="pull-left table-fill" id="Bananna">
<thead>
<tr>
<th class="table-hover">Vendor</th>
<th class="table-hover">Section</th>
<th class="table-hover">Amount Of Tickets</th>
<th class="table-hover">Price Per Ticket</th>
<th class="table-hover">Link</th>
</tr>
</thead>
</table>
</body>
<script src="//code.jquery.com/jquery-1.11.2.min.js"></script>
<script src="js/1.js"></script>
<script src="js/2.js"></script>
1.js和2.js完全一样
$.ajax({
type: 'GET',
crossDomain: true,
dataType: 'json',
url: 'API LINK HERE',
success: function (json) {
//var json = $.parseJSON(data);
for(var i =0;i < json.results.length;i++) {
var section = json.results[i].section;
var no = json.results[i].avalible;
var price = json.results[i].price;
var button = "<button class='redirect-button' data-url='viagogo.com'>Compare</button>";
$("#Bananna").append("<tbody><tr><td>"+section+"</td><td>"+no+"</td><td>"+price+"</td><td>"+button+"</td></tr></tbody>");
$("#Bananna").find(".redirect-button").click(function(){
location.href = $(this).attr("data-url");
});
}
},
error: function(error){
console.log(error);
}
});
在获得两个结果集之前不要触摸 table,这只会使排序变得更加困难。定义一些全局结果数组并使用 concat.
用 AJAX 数据填充它
var results = [];
//on success of each AJAX call
results = results.concat(json.results);
为确保在排序之前已加载两组数据,只需将第二个 AJAX 调用包含在第一个的完整函数中,或者如果您将来可能有其他 AJAX 请求,则使用递归.
获得所有数据后,您可以按价格排序:
results.sort(function(a,b){
return a.price-b.price;
});
最后,像以前一样遍历排序后的数组并追加。
编辑:
与其制作一堆完全相同的文件,不如定义一个递归函数来加载一个 API url 数组,如下所示:
function loadURLs(urls,callback){
//are there more urls to AJAX?
if(urls.length==0){
//no: call the callback function
callback();
}else{
//yes: make the AJAX call...
$.ajax({
type: 'GET',
crossDomain: true,
dataType: 'json',
url: urls[0],
success: function (json) {
//put data into the results array
results = results.concat(json.results);
//load the remaining urls
loadURLs(urls.slice(1),callback);
}
}
}
}
此函数接受一个 URL 链接数组。它将一个接一个地遍历并将 json 数据加载到全局结果数组中。在完成所有链接后,它将调用回调函数。在回调函数中,您可以对数组进行一次排序,然后附加到 table。你的最终 js 看起来像这样:
//define loadURLs function here
//global results array
var results = [];
//define all your links links here
var myURLs = ['API LINK 1','API LINK 2'];
loadURLs(myURLs,function(){
//all json data has been loaded, sort
results.sort(function(a,b){
return a.price-b.price;
});
//iterate over the sorted array and append
for(var i=0;i<results.length;i++){
//append to table
}
});
这会让人感到困惑,但可能是一个简单的答案。
我有两个 api 格式的 json 链接。将数据拉入 table.
目前,所有 API1 都先放入 table,然后再放入 API2。
两个 api 的价格都采用 £XX.XX 格式。
我要找的是按价格排序的table。因此,例如 API1 的前 2 个结果是最便宜的,然后是 API2,然后是 API1,依此类推。
我把我的代码贴在下面给你看看。
Table.html
<table class="pull-left table-fill" id="Bananna">
<thead>
<tr>
<th class="table-hover">Vendor</th>
<th class="table-hover">Section</th>
<th class="table-hover">Amount Of Tickets</th>
<th class="table-hover">Price Per Ticket</th>
<th class="table-hover">Link</th>
</tr>
</thead>
</table>
</body>
<script src="//code.jquery.com/jquery-1.11.2.min.js"></script>
<script src="js/1.js"></script>
<script src="js/2.js"></script>
1.js和2.js完全一样
$.ajax({
type: 'GET',
crossDomain: true,
dataType: 'json',
url: 'API LINK HERE',
success: function (json) {
//var json = $.parseJSON(data);
for(var i =0;i < json.results.length;i++) {
var section = json.results[i].section;
var no = json.results[i].avalible;
var price = json.results[i].price;
var button = "<button class='redirect-button' data-url='viagogo.com'>Compare</button>";
$("#Bananna").append("<tbody><tr><td>"+section+"</td><td>"+no+"</td><td>"+price+"</td><td>"+button+"</td></tr></tbody>");
$("#Bananna").find(".redirect-button").click(function(){
location.href = $(this).attr("data-url");
});
}
},
error: function(error){
console.log(error);
}
});
在获得两个结果集之前不要触摸 table,这只会使排序变得更加困难。定义一些全局结果数组并使用 concat.
用 AJAX 数据填充它var results = [];
//on success of each AJAX call
results = results.concat(json.results);
为确保在排序之前已加载两组数据,只需将第二个 AJAX 调用包含在第一个的完整函数中,或者如果您将来可能有其他 AJAX 请求,则使用递归.
获得所有数据后,您可以按价格排序:
results.sort(function(a,b){
return a.price-b.price;
});
最后,像以前一样遍历排序后的数组并追加。
编辑:
与其制作一堆完全相同的文件,不如定义一个递归函数来加载一个 API url 数组,如下所示:
function loadURLs(urls,callback){
//are there more urls to AJAX?
if(urls.length==0){
//no: call the callback function
callback();
}else{
//yes: make the AJAX call...
$.ajax({
type: 'GET',
crossDomain: true,
dataType: 'json',
url: urls[0],
success: function (json) {
//put data into the results array
results = results.concat(json.results);
//load the remaining urls
loadURLs(urls.slice(1),callback);
}
}
}
}
此函数接受一个 URL 链接数组。它将一个接一个地遍历并将 json 数据加载到全局结果数组中。在完成所有链接后,它将调用回调函数。在回调函数中,您可以对数组进行一次排序,然后附加到 table。你的最终 js 看起来像这样:
//define loadURLs function here
//global results array
var results = [];
//define all your links links here
var myURLs = ['API LINK 1','API LINK 2'];
loadURLs(myURLs,function(){
//all json data has been loaded, sort
results.sort(function(a,b){
return a.price-b.price;
});
//iterate over the sorted array and append
for(var i=0;i<results.length;i++){
//append to table
}
});