如何在JavaScript中迭代包含数组的对象?
我有以下JSON结构(一个数组,其中每个数组包含一个dict元素),我从一个基于函数的视图接收到它,我希望遍历所有元素并丢弃那些带有空字典的数组如何在JavaScript中迭代包含数组的对象?,javascript,jquery,arrays,json,Javascript,Jquery,Arrays,Json,我有以下JSON结构(一个数组,其中每个数组包含一个dict元素),我从一个基于函数的视图接收到它,我希望遍历所有元素并丢弃那些带有空字典的数组 data.table_values = [[{'id': 1021972,'Aging_Un_investigated_Issue': '0.94', 'User': 'John P.', 'Open_date':'2017-08-04 01:34:18','End_date':'2017-09-05 00:29:01', 'Ticket_stat
data.table_values = [[{'id': 1021972,'Aging_Un_investigated_Issue': '0.94',
'User': 'John P.', 'Open_date':'2017-08-04 01:34:18','End_date':'2017-09-05 00:29:01',
'Ticket_status':'Transferred'},{'id': 1036722, 'Aging_Un_investigated_Issue': '0.01',
'User': 'John P.', 'Open_date':'2017-09-01 00:34:18',
'End_date':'', 'Ticket_status':'Researching'},{'id': 1015621,
'Aging_Un_investigated_Issue': '0.11', 'User': 'John D.','Open_date':'2017-01-01 00:00:18',
'End_date':'2017-09-01 20:20:57','Ticket_status':'Closed'}],
[{}],
[{}],
[{'id': 1045971,'Aging_Un_investigated_Issue': '0.23',
'User': 'John C.', 'Open_date':'2016-05-01 02:32:18','End_date':'2017-09-05 12:29:01',
'Ticket_status':'Transferred'},{'id': 1035522, 'Aging_Un_investigated_Issue': '0.02',
'User': 'John C.', 'Open_date':'2015-08-01 00:34:18',
'End_date':'', 'Ticket_status':'Researching'},{'id': 1223621,
'Aging_Un_investigated_Issue': '0.11', 'User': 'John C.','Open_date':'2016-01-01 00:00:18',
'End_date':'2017-09-02 21:20:57','Ticket_status':'Closed'}]]
我知道如何遍历一个数组元素的所有值,但我不知道如何遍历所有数组的所有值
//iterate through all the values of one array element
<script>
//select the first list element
//data.table_values is the variable that receives the JSON
var table_values = data.table_values[0]
setTable()
function setTable(){
var tbody = $('#reservations tbody'),
//iterate through the elements of list 0
props = ["id", "User", "Open_date", "Ticket_status", "End_date"];
$.each(table_values, function(i, value) {
var tr = $('<tr>');
$.each(props, function(i, prop) {
$('<td>').html(value[prop]).appendTo(tr);
});
tbody.append(tr);
});
$(document).ready(function(){
$('#reservations').DataTable();
});
}
</script>
<html>
<table id="reservations" style="width:100%">
<thead>
<tr>
<th>ID</th>
<th>User</th>
<th>Open Date</th>
<th>Ticket Status</th>
<th>End Date</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</html>
//遍历一个数组元素的所有值
//选择第一个列表元素
//data.table_values是接收JSON的变量
var table_values=数据。table_values[0]
可设置()
函数可设置(){
var tbody=$(“#保留tbody”),
//遍历列表0的元素
道具=[“id”、“用户”、“打开日期”、“票证状态”、“结束日期”];
$。每个(表_值,函数(i,值){
var tr=$('');
美元。每个(道具、功能(i、道具){
$('').html(值[prop]).appendTo(tr);
});
tbody.append(tr);
});
$(文档).ready(函数(){
$(“#保留”).DataTable();
});
}
身份证件
使用者
开放日期
票证状态
结束日期
如何遍历所有数组并丢弃那些包含空dict数组的数组
请随意使用我准备的,这样你就可以做一些测试了 您希望遍历data.table_values数组并测试每个元素是否为空-如果为空,则跳过迭代
var data={};//假设您已在以下日期之前声明数据——
//我只需要这个来让代码片段正常工作
data.table_值=[
[{
“id”:1021972,
“老龄化问题”:“0.94”,
“用户”:“John P.”,
“开放日期”:“2017-08-04 01:34:18”,
“结束日期”:“2017-09-05 00:29:01”,
“票证状态”:“已转移”
}, {
“id”:1036722,
“老龄化问题”:“0.01”,
“用户”:“John P.”,
“开放日期”:2017-09-01 00:34:18,
“结束日期”:“,
“票证状态”:“正在研究”
}, {
“id”:1015621,
“老龄化问题”:“0.11”,
“用户”:“John D.”,
“开放日期”:2017-01-01 00:00:18,
“结束日期”:“2017-09-01 20:20:57”,
“票证状态”:“已关闭”
}], [{}], [{}], [{
“id”:1045971,
“老龄化问题”:“0.23”,
“用户”:“John C.”,
“开放日期”:“2016-05-01 02:32:18”,
“结束日期”:“2017-09-05 12:29:01”,
“票证状态”:“已转移”
}, {
“id”:1035522,
“老龄化问题”:“0.02”,
“用户”:“John C.”,
“开放日期”:“2015-08-01 00:34:18”,
“结束日期”:“,
“票证状态”:“正在研究”
}, {
“id”:1223621,
“老龄化问题”:“0.11”,
“用户”:“John C.”,
“开放日期”:“2016-01-01 00:00:18”,
“结束日期”:“2017-09-02 21:20:57”,
“票证状态”:“已关闭”
}]
];
for(数据的表值。表值){
如果(表_values.length==0)继续;
可设置();
}
函数可设置(){
var tbody=$('#reservations')。find('tbody'),
//遍历列表0的元素
道具=[“id”、“用户”、“打开日期”、“票证状态”、“结束日期”];
$。每个(表_值,函数(i,值){
var tr=$('');
美元。每个(道具、功能(i、道具){
$('').html(值[prop]).appendTo(tr);
});
tbody.append(tr);
});
}
身份证件
使用者
开放日期
票证状态
结束日期
map
和filter
语句修改了您的小提琴,以完成1和2:
扁平化是一种足够的策略,还是您试图保留表数据的数组结构?
空dicts
-这意味着什么?没有元素,只有一个没有元素的{}
您不应该做的={}
-在JavaScript中{}
每次都是一个新对象,所以它总是会失败。由于table\u values
是一个数组,因此更简单的解决方案是只测试它的长度:table\u values.length>0
。我建议对这个问题进行编辑以反映这一点。那么,我们可以做些什么来避免使用={}
?@AlejandroBautistaRamos@Aydin如果你需要做={}
,你可以使用JSON.stringify
作为一种快速而肮脏的方法,首先在两边使用。查看此q/a了解更优雅的方法:在执行涉及id的jQuery选择器时,首先执行id选择器,并对结果调用.find()
:$('#reservations')。find('tbody')
而不是$('#reservations tbody')
,因为for ids jQuery只使用本机getElementById方法。另外,没有理由在for
循环中使用setTable()
函数-只是修复了它。我只是想指出如何遍历数组,而不是提供一个总体的代码改进审查:)对数组记录进行展平可以实现我想要的技巧。我实现了您的解决方案,但没有收到任何数据。