【问题标题】:Get objects from array with javascript使用javascript从数组中获取对象
【发布时间】:2014-01-11 11:26:02
【问题描述】:

我使用ajax 调用从php 脚本中获取对象数组;但是,我无法从中获取嵌套对象。

openings 对象如下所示:

Object
2014-01-11: Array[5]
   0: Object
      appointments: "0"
      name: "0"
      openings: "1"
      route_date: "2014-01-11"
__proto__: Object
1: Object
2: Object
3: Object
4: Object
length: 5
__proto__: Array[0]
2014-01-12: Array[5]
2014-01-13: Array[5]
2014-01-14: Array[5]
2014-01-15: Array[5]
2014-01-16: Array[5]
2014-01-17: Array[5]
2014-01-18: Array[5]



length; undefined appointment.js?ver=3.8:58
begin: 20140111 appointment.js?ver=3.8:59
end: 20140228

我尝试使用console.log("length; "+openings.length); 来获取返回的原始对象的长度,但它返回未定义。

这是我的 php 函数代码:

    function get_available_times()
{
    global $wpdb; 

    $begin = $_REQUEST['begin'];
    $end = $_REQUEST['end']; 
    /*get time slots*/
    $query = "
        SELECT DISTINCT routes.route_date, time_slots.name, time_slots.openings, time_slots.appointments
        FROM routes
        INNER JOIN time_slots ON routes.route_id = time_slots.route_id
        WHERE route_date
        BETWEEN {$begin}
        AND {$end}
        ORDER BY route_date, name
        "; 
    $time_slots = $wpdb->get_results($query);

    /*organize slots into array*/
    $openings = array(); 
    foreach($time_slots as $ts)
    {
        if(empty($openings))
        {
            $openings[$ts->route_date][$ts->name] = $ts; 
        }
        elseif (array_key_exists($ts->route_date, $openings)) 
        {
            $openings[$ts->route_date][$ts->name]=$ts; 
        }
        else
        {
            $openings[$ts->route_date][$ts->name] = $ts; 
        }
    }

    /*return results*/
    $result['openings'] = $openings; 
    $result['time'] = $time_slots;  
    $result['begin'] = $begin; 
    $result['end'] = $end; 
    $result['query'] = $query; 
    $result['type'] = "success"; 
    $result = json_encode($result);
    echo $result;
    die(); 
}

这是我正在使用的 Javascript 代码:

$.ajax({
            type: "post",
            dataType: "json",
            url: ajaxurl, 
            data:{action: "get_available_times", begin: begin, end:end},
            success: function(response){
                if(response.type == "success"){
                    console.log("testing"); 
                    var openings = response.openings;
                    console.dir(openings);
                    console.log("length; "+openings.length); 
                    console.log("begin: "+response.begin);
                    console.log("end: "+response.end);


                }
            }
        });

所有这一切的重点是我希望能够遍历每个日期并将值放入 HTML。

【问题讨论】:

  • 你只想要日期吗?
  • 不,我想要日期对象中每个对象的 name 值,如果这有意义的话。对于每一天,我都需要将所有对象名称值放入 DOM。
  • @ArunPJohny 这不会影响我正在做的事情。它不起作用。你说的不对
  • @Blaine 抱歉,看来我看错了...
  • 虽然 beginend 是持有其他键的变量

标签: javascript php jquery arrays object


【解决方案1】:

嗯,看起来您正在获取一个具有 5 个属性的对象,这些属性被格式化为一个日期,每个属性都有自己的数组值。

所以,试试这样的:

var refDate = new Date(2014, 01, 14);

$.each(response.openings, function(k, opening){

    var parts = k.split('-'), //split the date key
        date = new Date(parts[2], (parts[1] - 1), parts[0]); //parse it do a date

    // jump to next iteration if dates doesn't match
    if(refDate.getTime() !=== date.getTime()) return true;

    $.each(opening, function(k2, v){
        console.log(v.name);
    });
});

您也应该能够将值映射到自定义结果。这会给你所有的名字:

var result = $.map(response.openings, function(v){
     return $.map(v, function(v2){
         return { name: v2.name };
     });
});
console.log(result);

【讨论】:

  • 你在结构中是对的。这正是我想要的!感谢您的帮助!
  • @Blaine 很高兴为您提供帮助。我将添加另一个您可能会在几秒钟内发现有用的解决方案。
  • 太棒了!我将如何获得一组特定的日期。假设我想获取 20140114 的所有值。我怎样才能抓住那个对象,这样我就可以像你在第二个循环中那样进行迭代>?
  • @Blaine 你在谈论route_date 还是日期键?
  • 我想要获取日期键。当我创建数组时,我将其设为关联数组,并认为我会在 JS 中使用数组,但似乎并非如此,所以我对如何获取所有特定日期的对象(日期键)
猜你喜欢
  • 1970-01-01
  • 2021-08-22
  • 1970-01-01
  • 2019-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-23
  • 1970-01-01
相关资源
最近更新 更多