Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScript中迭代包含数组的对象?_Javascript_Jquery_Arrays_Json - Fatal编程技术网

如何在JavaScript中迭代包含数组的对象?

如何在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

我有以下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_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);
});
}

身份证件
使用者
开放日期
票证状态
结束日期
  • 过滤掉任何没有“id”的元素
  • 我通过添加
    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()
    函数-只是修复了它。我只是想指出如何遍历数组,而不是提供一个总体的代码改进审查:)对数组记录进行展平可以实现我想要的技巧。我实现了您的解决方案,但没有收到任何数据。