Я бы предложил вам использовать $.each()
, а не $.map()
.Примерно так:
var rows = [];
$.getJSON('https://next.json-generator.com/api/json/get/E1qcwkNxr', function (response) {
$.each(response, function(i, x){
var obj = {};
var s = ["age", "index", "registered", "balance", "eyeColor"];
$.each(x, function(k, v){
if(s.indexOf(k) >= 0){
obj[k] = v;
}
});
rows.push(obj);
});
});
Теперь у вас будет чистый массив объектов, который имеет ключи и значения.Затем вы можете использовать его для построения таблицы.
var $table = $("<table>");
$("<thead>").appendTo($table);
$("<tr>").appendTo($("thead", $table));
$.each(rows[0], function(key, val){
$("<th>").html(key).appendTo($("thead tr", $table));
});
var $tbody = $("<tbody>").appendTo($table);
$.each(rows, function(ind, row){
var $trow = $("<tr>").appendTo($tbody);
$.each(row, function (item){
$("<td>").html(item).appendTo($trow);
});
});
Рабочий пример: https://jsfiddle.net/Twisty/xv4kzy8L/
Обновление
Если вам нужен столдля отображения в определенном виде, вы можете сделать это с вашим массивом имен ключей.Затем отобразите результаты в определенном порядке:
var headers = ["age", "index", "registered", "balance", "eyeColor"];
var $table = $("<table>");
$("<thead>").appendTo($table);
$("<tr>").appendTo($("thead", $table));
$.each(headers, function(key, val){
$("<th>").html(val).appendTo($("thead tr", $table));
});
var $tbody = $("<tbody>").appendTo($table);
$.each(rows, function(ind, row){
var $trow = $("<tr>").appendTo($tbody);
$.each(headers, function (k, i){
$("<td>").html(row[i]).appendTo($trow);
});
});
Надеюсь, это поможет.