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