Javascript 从json文件中检索数值,并在if语句中以动态方式匹配该数值

Javascript 从json文件中检索数值,并在if语句中以动态方式匹配该数值,javascript,jquery,json,if-statement,Javascript,Jquery,Json,If Statement,成就:我正在我的网站的一个部分建立一个广播播音员提要 问题:我必须根据一天中的特定时间和一周中的某一天显示不同的播音员。我能够创建一个ajax调用(jquery),并基于json文件中每个对象的位置,以静态方式显示一个图像(以及一些其他信息) 问:是否有一种更简单(更快)的方法来找到确切的对象并将其与时间和日期匹配,以便只显示一个对象并避免编写大量代码 代码(为了更好地解释我的问题): HTML JQUERY 我的问题是:我上传了一堆代码。正如您所看到的,我调用每个标记及其在数组中的位置(数

成就:我正在我的网站的一个部分建立一个广播播音员提要

问题:我必须根据一天中的特定时间和一周中的某一天显示不同的播音员。我能够创建一个ajax调用(jquery),并基于json文件中每个对象的位置,以静态方式显示一个图像(以及一些其他信息)

问:是否有一种更简单(更快)的方法来找到确切的对象并将其与时间和日期匹配,以便只显示一个对象并避免编写大量代码

代码(为了更好地解释我的问题):

HTML


JQUERY

我的问题是:我上传了一堆代码。正如您所看到的,我调用每个标记及其在数组中的位置(数字),但是,理想情况下,我希望创建一个函数,在标记中查找两个值之间的值(就像我对if语句所做的那样),然后匹配它并显示在if语句中

到目前为止,我创建的代码是:

    $.ajax({
            url: "announcers.json",
            type: "GET",
            dataType: "JSON",
            success: function(markers) {

                var date = new Date();
                var day = date.getDay();
                var secs = date.getSeconds() + (60 * (date.getMinutes() + (60 * date.getHours())));

                if (day==1 || day==2 || day==3 || day==4 || day==5) {
                    if (secs >= 19800 && secs <= 35999) {
                        $('#radioOnAir').prepend('<img src="images/'+markers[4].announcer_photo+'">'+'<div class="left">'+'<div class="onAir">on air</div>'+'<div>'+markers[4].announcer_name+'</div></div>');
                        if (markers[4].announcer_facebook != null) {
                            $('.left').append('<a href="'+markers[4].announcer_facebook+'"><i class="fa fa-facebook" aria-hidden="true"></i></a>');
                        }
                        if (markers[4].announcer_twitter != null) {
                            $('.left').append('<a href="'+markers[4].announcer_twitter+'"><i class="fa fa-twitter" aria-hidden="true"></i></a>');
                        }
                        if (markers[4].announcer_mail != null) {
                            $('.left').append('<a href="mailto:'+markers[4].announcer_mail+'"><i class="fa fa-envelope-o" aria-hidden="true"></i></a>');
                        }
                    }
                    else if (secs >= 36000 && secs <= 53999) {
                        $('#radioOnAir').prepend('<img src="images/'+markers[0].announcer_photo+'">'+'<div class="left">'+'<div class="onAir">on air</div>'+'<div>'+markers[0].announcer_name+'</div></div>');
                        if (markers[0].announcer_facebook != null) {
                            $('.left').append('<a href="'+markers[0].announcer_facebook+'"><i class="fa fa-facebook" aria-hidden="true"></i></a>');
                        }
                        if (markers[0].announcer_twitter != null) {
                            $('.left').append('<a href="'+markers[0].announcer_twitter+'"><i class="fa fa-twitter" aria-hidden="true"></i></a>');
                        }
                        if (markers[0].announcer_mail != null) {
                            $('.left').append('<a href="mailto:'+markers[0].announcer_mail+'"><i class="fa fa-envelope-o" aria-hidden="true"></i></a>');
                        }
                    }
                    else if (secs >= 54000 && secs <= 71999) {
                        $('#radioOnAir').prepend('<img src="images/'+markers[3].announcer_photo+'">'+'<div class="left">'+'<div class="onAir">on air</div>'+'<div>'+markers[3].announcer_name+'</div></div>');
                        if (markers[3].announcer_facebook != null) {
                            $('.left').append('<a href="'+markers[3].announcer_facebook+'"><i class="fa fa-facebook" aria-hidden="true"></i></a>');
                        }
                        if (markers[3].announcer_twitter != null) {
                            $('.left').append('<a href="'+markers[3].announcer_twitter+'"><i class="fa fa-twitter" aria-hidden="true"></i></a>');
                        }
                        if (markers[3].announcer_mail != null) {
                            $('.left').append('<a href="mailto:'+markers[3].announcer_mail+'"><i class="fa fa-envelope-o" aria-hidden="true"></i></a>');
                        }
                    }
                }
                if (secs >= 72000 && secs <= 86399) {
                    if (day==1 || day==2) {
                        $('#radioOnAir').prepend('<img src="images/'+markers[10].announcer_photo+'">'+'<div class="left">'+'<div class="onAir">on air</div>'+'<div>'+markers[10].announcer_name+'</div></div>');
                    }
                    else if (day==3 || day==4 || day==5) {
                        $('#radioOnAir').prepend('<img src="images/'+markers[8].announcer_photo+'">'+'<div class="left">'+'<div class="onAir">on air</div>'+'<div>'+markers[8].announcer_name+'</div></div>');
                    }
                }
                if (day==6) {
                    if (secs >= 25200 && secs <= 32399) {
                        $('#radioOnAir').prepend('<img src="images/'+markers[1].announcer_photo+'">'+'<div class="left">'+'<div class="onAir">on air</div>'+'<div>'+markers[1].announcer_name+'</div></div>');
                    }
                    else if (secs >= 32400 && secs <= 50399) {
                        $('#radioOnAir').prepend('<img src="images/'+markers[6].announcer_photo+'">'+'<div class="left">'+'<div class="onAir">on air</div>'+'<div>'+markers[6].announcer_name+'</div></div>');
                    }
                    else if (secs >= 50400 && secs <= 71999) {
                        $('#radioOnAir').prepend('<img src="images/'+markers[2].announcer_photo+'">'+'<div class="left">'+'<div class="onAir">on air</div>'+'<div>'+markers[2].announcer_name+'</div></div>');
                    }
                }
                if (day==7) {
                    if (secs >= 32400 && secs <= 50399) {
                        $('#radioOnAir').prepend('<img src="images/'+markers[7].announcer_photo+'">'+'<div class="left">'+'<div class="onAir">on air</div>'+'<div>'+markers[7].announcer_name+'</div></div>');
                    }
                    else if (secs >= 50400 && secs <= 71999) {
                        $('#radioOnAir').prepend('<img src="images/'+markers[9].announcer_photo+'">'+'<div class="left">'+'<div class="onAir">on air</div>'+'<div>'+markers[9].announcer_name+'</div></div>');
                    }
                    else if (secs >= 72000 && secs <= 79199) {
                        $('#radioOnAir').prepend('<img src="images/'+markers[5].announcer_photo+'">')+'<div class="left">'+'<div class="onAir">on air</div>'+'<div>'+markers[5].announcer_name+'</div></div>';
                    }
                }
            }
        });
    });

JSON file:

    [
  {
    "announcer_id": "18",
    "announcer_time_start": "05:30:00",
    "announcer_time_end": "10:59:59",
    "announcer_photo": "Bob and Di.jpg",
    "announcer_name": "Bob and Diana",
    "announcer_facebook": "http://www.facebook.com/923thedock",
    "announcer_twitter": "http://www.twitter.com/923thedock",
    "announcer_rss": "http://923thedock.com/bobndiana/",
    "announcer_mail": "bwallace@larche.com",
    "announcer_weekday": "1,2,3,4,5"
  },
  {
    "announcer_id": "17",
    "announcer_time_start": "09:00:00",
    "announcer_time_end": "11:59:59",
    "announcer_photo": "Bob Wallace.jpg",
    "announcer_name": "Bob Wallace",
    "announcer_facebook": "http://www.facebook.com/923thedock",
    "announcer_twitter": "http://www.twitter.com/923thedock",
    "announcer_rss": "http://923thedock.com/bobndiana/",
    "announcer_mail": "bwallace@larche.com",
    "announcer_weekday": ""
  },
  {
    "announcer_id": "3",
    "announcer_time_start": "14:00:00",
    "announcer_time_end": "17:59:59",
    "announcer_photo": "don-s.jpg",
    "announcer_name": "Don Vail",
    "announcer_facebook": "http://www.facebook.com/923thedock",
    "announcer_twitter": "http://www.twitter.com/923thedock",
    "announcer_rss": "http://923thedock.com/announcers/don-vail/",
    "announcer_mail": "dvail@larche.com",
    "announcer_weekday": "1,2,3,4,5"
  }
]
$.ajax({
url:“announcers.json”,
键入:“获取”,
数据类型:“JSON”,
成功:功能(标记){
变量日期=新日期();
var day=date.getDay();
var secs=date.getSeconds()+(60*(date.getMinutes()+(60*date.getHours());
如果(天==1 | |天==2 | |天==3 | |天==4 | |天==5){

如果(secs>=19800&&secs=36000&&secs=54000&&secs=72000&&secs=25200&&secs=32400&&secs=50400&&secs=32400&&secs=50400&&secs=72000&&secs这将使用moment.js,因为Javascript中的日期非常糟糕

<script
  src="https://code.jquery.com/jquery-1.12.4.min.js"
  integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ="
  crossorigin="anonymous"></script>

<script src="https://momentjs.com/downloads/moment.js"></script>
<script>
$(function(){
  $.ajax({
    url: "announcers.json",
    type: "GET",
    dataType: "JSON",
    cache: false,
    success: function(markers) {
      var momentNow = moment();
      $.each(markers,function(i, val){
        $arrDays = val.announcer_weekday.split(",");  //create array of the weekdays
        if($arrDays.indexOf(momentNow.day())) {                   //is one of those days today?
          var arrStartTimes = val.announcer_time_start.split(":");  //get the start time into an array
          var arrEndTimes = val.announcer_time_end.split(":");      //get the end time into an array
          var stime = moment().hour(arrStartTimes[0]).minute(arrStartTimes[1]).second(arrStartTimes[2]);  //set the date today, then override the hour/minute/second
          var etime = moment().hour(arrEndTimes[0]).minute(arrEndTimes[1]).second(arrEndTimes[2]);        //same here for end time
          if(momentNow.isSameOrAfter(stime) && momentNow.isSameOrBefore(etime) ) {  //the start time is now or later and the end time is now or before
            alert(val.announcer_name + " should be on the air right now");
          } else {
            alert(val.announcer_name + " should not be on the air right now");
          }
        } //if($arrDays.indexOf(momentNow.day())) {
      }); //$.each(markers,function(i, val){
    }
  });
});
</script>

$(函数(){
$.ajax({
url:“announcers.json”,
键入:“获取”,
数据类型:“JSON”,
cache:false,
成功:功能(标记){
var momentNow=力矩();
$。每个(标记、函数(i、val){
$arrDays=val.announcer\u weekday.split(“,”)//创建工作日数组
如果($arrDays.indexOf(momentNow.day()){//今天就是这样的日子吗?
var arrStartTimes=val.announcer\u time\u start.split(“:”)//将开始时间放入数组中
var arrEndTimes=val.announcer\u time\u end.split(“:”)//将结束时间放入数组中
var stime=moment().hour(arrStartTimes[0]).minute(arrStartTimes[1]).second(arrStartTimes[2]);//设置今天的日期,然后覆盖小时/分钟/秒
var etime=moment().hour(arrEndTimes[0]).minute(arrEndTimes[1]).second(arrEndTimes[2]);//此处的结束时间相同
如果(momentNow.isSameOrAfter(stime)和&momentNow.isSameOrBefore(etime)){//开始时间是现在或更晚,结束时间是现在或之前
警报(val.announer_name+“应该马上播出”);
}否则{
警报(val.announer_name+“现在不应该播出”);
}
}//如果($arrDays.indexOf(momentNow.day())){
})/$。每个(标记、函数(i、val){
}
});
});

我计算出了第二部分(从一天中的某个特定时间),但不是一周中的某一天:

$.ajax({
        url: "announcers.json",
        type: "GET",
        dataType: "JSON",
        success: function(markers) {

            var date = new Date();
            var day = date.getDay();
            var secs = date.getSeconds() + (60 * (date.getMinutes() + (60 * date.getHours())));
            console.log(day, secs);

            for (i = 0; i < markers.length; i++) { 
                // console.log(markers[i].announcer_weekday);
                var a = markers[i].announcer_time_start.split(':');
                var seconds = (+a[0]) * 60 * 60 + (+a[1]) * 60 + (+a[2]);

                var b = markers[i].announcer_time_end.split(':');
                var secondsb = (+b[0]) * 60 * 60 + (+b[1]) * 60 + (+b[2]); 

                console.log(seconds, secondsb, markers[i].announcer_name, markers[i].announcer_weekday, markers[i].announcer_photo);
                if (seconds <= secs && secondsb >= secs) {
                    console.log(markers[i].announcer_name);
                }


            }
        }
    });
但通过这种方式,我无法从循环中检索任何值:

for (i = 0; i < markers.length; i++) { 
                // console.log(markers[i].announcer_weekday);
                var a = markers[i].announcer_time_start.split(':');
                var seconds = (+a[0]) * 60 * 60 + (+a[1]) * 60 + (+a[2]);

                var b = markers[i].announcer_time_end.split(':');
                var secondsb = (+b[0]) * 60 * 60 + (+b[1]) * 60 + (+b[2]); 
                var dayoftheweek = markers[i].announcer_weekday;
                console.log(seconds, secondsb, markers[i].announcer_name, markers[i].announcer_weekday, markers[i].announcer_photo);
                if (day == dayoftheweek) {
                    if (seconds <= secs && secondsb >= secs) {
                        console.log(markers[i].announcer_name);
                    }
                }
            }
(i=0;i //console.log(markers[i].announcer_平日); var a=markers[i].播音员\u time\u start.split(':'); 变量秒=(+a[0])*60*60+(+a[1])*60+(+a[2]); var b=markers[i].播音员\u time\u end.split(':'); var secondsb=(+b[0])*60*60+(+b[1])*60+(+b[2]); var DayOfWeek=markers[i].播音员(工作日); console.log(秒,秒,标记[i]。播音员姓名,标记[i]。播音员工作日,标记[i]。播音员照片); 如果(天==星期几){ 如果(秒=秒){ console.log(markers[i].annour\u name); } } }

如何检查数组中的单个元素,如“Inventor_weekday”:[3,4,5]使用my current day,然后将其与一天中的时间匹配?

您可以简单地迭代json响应,然后检查条件以更详细地说明上述内容,迭代json对象,检查以查看播音员时间开始时间小于“现在”,播音员时间结束时间大于“现在”。不清楚您在问什么,但如果您只是将当前时间格式化为与数据相同的格式,而不是尝试使用秒数,似乎会更容易。关于如何格式化日期和时间,有很多问题。不清楚您的其余代码在做什么(您显示的JSON似乎与代码中使用的索引没有任何关系)。谢谢你,我现在就试试,我会尽快让你知道的!!我也会添加我的解决方案,即使它不能正常工作。很好,它能工作!顺便问一下,如果你有机会,你能告诉我我的代码哪里错了吗?我必须在一周中的其他时间迭代吗?你的代码没有错,只是不同而已。明白吗日期之间的时差是一个巨大的痛苦,除非您使用moment.js(或半打其他类似的库)为您完成繁重的任务。moment.js和我使用$.each()的事实从jQuery来看,你写的和我做的唯一的主要区别是……也许我误解了你。如果你想引用播音员的数据,请使用以下(在我的代码中)val.annoucer\u name,val.annoucer\u time\u start,etcyeah,$arrDays.indexOf是解决我的问题的关键。谢谢你的提示。顺便说一句,moment.js是个好主意,用它来缩短流程是有意义的。两个主意都不错,但你给了我解决我问题的提示。谢谢
$.ajax({
        url: "announcers.json",
        type: "GET",
        dataType: "JSON",
        success: function(markers) {

            var date = new Date();
            var day = date.getDay();
            var secs = date.getSeconds() + (60 * (date.getMinutes() + (60 * date.getHours())));
            console.log(day, secs);

            for (i = 0; i < markers.length; i++) { 
                // console.log(markers[i].announcer_weekday);
                var a = markers[i].announcer_time_start.split(':');
                var seconds = (+a[0]) * 60 * 60 + (+a[1]) * 60 + (+a[2]);

                var b = markers[i].announcer_time_end.split(':');
                var secondsb = (+b[0]) * 60 * 60 + (+b[1]) * 60 + (+b[2]); 

                console.log(seconds, secondsb, markers[i].announcer_name, markers[i].announcer_weekday, markers[i].announcer_photo);
                if (seconds <= secs && secondsb >= secs) {
                    console.log(markers[i].announcer_name);
                }


            }
        }
    });
{
    "announcer_id": "21",
    "announcer_time_start": "18:00:00",
    "announcer_time_end": "23:59:59",
    "announcer_photo": "Mark Hendrie.jpg",
    "announcer_name": "Mark Hendrie",
    "announcer_facebook": "http://www.facebook.com/923thedock",
    "announcer_twitter": "http://www.twitter.com/923thedock",
    "announcer_rss": "",
    "announcer_mail": "mhendrie@larche.com",
    "announcer_weekday": [3,4,5]
  }
for (i = 0; i < markers.length; i++) { 
                // console.log(markers[i].announcer_weekday);
                var a = markers[i].announcer_time_start.split(':');
                var seconds = (+a[0]) * 60 * 60 + (+a[1]) * 60 + (+a[2]);

                var b = markers[i].announcer_time_end.split(':');
                var secondsb = (+b[0]) * 60 * 60 + (+b[1]) * 60 + (+b[2]); 
                var dayoftheweek = markers[i].announcer_weekday;
                console.log(seconds, secondsb, markers[i].announcer_name, markers[i].announcer_weekday, markers[i].announcer_photo);
                if (day == dayoftheweek) {
                    if (seconds <= secs && secondsb >= secs) {
                        console.log(markers[i].announcer_name);
                    }
                }
            }