JS:遍历一个对象's的子对象,检查<b、 按子对象解析's子字符串

JS: Iterate through an object's children objects, check if a < b, parse by child object's substring

本文关键字:对象 字符串 lt 遍历 JS 一个对象 检查      更新时间:2023-09-26

注意:如果你有兴趣帮助我完成这项工作,请查看我添加的其他注释,作为下面的注释,以查看我取得的一些额外进展。谢谢

我正试图创建一个简单的程序,用于参考大学足球时间表,并根据他们的排名跟踪输赢和潜在的季后赛参与者。我已经无计可施了,我试图制作一个脚本,显示哪些团队的排名比有问题的团队高,该子集检查哪些排名更高的团队有子字符串"LOSS",然后记录。将这些团队写入声明的div。我觉得,从逻辑上讲,我真的理解应该发生的步骤,但作为一个真正的新手,经过几个小时的测试、Stackoverflow筛选、测试、谷歌搜索、测试等,我遇到了一个(有点尴尬的)持续存在的障碍。

我只是还不是一个足够好的开发人员。

以下是我要做的:

(我正在使用的日期集;只包括团队子对象的子集,以限制此处占用的空间:)

// Declare global team variable (leftover from another JS file utilizing the same data)
var teamSched;
// 2014 College Foootball Gamedays
var gameDays = {
week1: ["Thursday, August 28th",
"Friday, August 29th",
"Saturday, August 30th",
"Sunday, August 31st",
"Monday, September 1st"],
week2: ["Thursday, September 4th",
"Friday, September 5th",
"Saturday, September 6th"],
week3: ["Thursday, September 11th",
"Friday, September 12th",
"Saturday, September 13th",
"Sunday, September 14th"],
week4: ["Thursday, September 18th",
"Friday, September 19th",
"Saturday, September 20th"],
week5: ["Thursday, September 25th",
"Friday, September 26th",
"Saturday, September 27th"],
week6: ["Thursday, October 2nd",
"Friday, October 3rd",
"Saturday, October 4th"],
week7: ["Thursday, October 9th",
"Friday, October 10th",
"Saturday, October 11th",
"Sunday, October 12th"],
week8: ["Tuesday, October 14th",
"Thursday, October 16th",
"Friday, October 17th",
"Saturday, October 18th"],
week9: ["Tuesday, October 21st",
"Thursday, October 23rd",
"Friday, October 24th",
"Saturday, October 25th",
"Sunday, October 26th"],
week10: ["Thursday, October 30th",
"Friday, October 31st",
"Saturday, November 1st"],
week11: ["Tuesday, November 4th",
"Wednesday, November 5th",
"Thursday, November 6th",
"Friday, November 7th",
"Saturday, November 8th"],
week12: ["Tuesday, November 11th",
"Wednesday, November 12th",
"Thursday, November 13th",
"Friday, November 14th",
"Saturday, November 15th"],
week13: ["Tuesday, November 18th",
"Wednesday, November 19th",
"Thursday, November 20th",
"Friday, November 21st",
"Saturday, November 22nd",
"Sunday, November 23rd"],
week14: ["Tuesday, November 25th",
"Thursday, November 27th",
"Friday, November 28th",
"Saturday, November 29th"],
week15: ["Thursday, December 4th",
"Saturday, December 6th"],
week16: ["Saturday, December 13th"]
}
// Individual Top 24 Team Objects
// #1:
teams = {
    fsu: {
    rank: 1,
    conf: "ACC",
    sched: 
        [gameDays.week1[2] + " <b>vs Oklahoma State</b>",
        gameDays.week2[2] + " <b>vs Citadel</b>",
        gameDays.week4[2] + " <b>vs #16 Clemson</b>",
        gameDays.week5[2] + " <b>at North Carolina State</b>",
        gameDays.week6[2] + " <b>vs Wake Forest</b>",
        gameDays.week7[2] + " <b>at Syracuse</b>",
        gameDays.week8[3] + " <b>vs #17 Notre Dame</b>",
        gameDays.week10[0] + " <b>at Louisville</b>",
        gameDays.week11[4] + " <b>vs Virginia</b>",
        gameDays.week12[4] + " <b>at Miami</b>",
        gameDays.week13[4] + " <b>vs Boston College</b>",
        gameDays.week14[3] + " <b>vs Florida</b>"]
},
// #2:
    bama: {
    rank: 2,
    conf: "SEC",
    sched: 
        [gameDays.week1[2] + " <b>vs West Virginia</b>",
        gameDays.week2[2] + " <b>vs Florida International</b>",
        gameDays.week3[2] + " <b>vs Southern Mississippi</b>",
        gameDays.week4[2] + " <b>vs Florida</b>",
        gameDays.week6[2] + " <b>at #18 Ole Miss</b>",
        gameDays.week7[2] + " <b>at Arkansas</b>",
        gameDays.week8[3] + " <b>vs #21 Texas A&M</b>",
        gameDays.week9[3] + " <b>at Tennessee</b>",
        gameDays.week11[4] + " <b>at #13 LSU</b>",
        gameDays.week12[4] + " <b>vs Mississippi State</b>",
        gameDays.week13[4] + " <b>vs Western Carolina</b>",
        gameDays.week14[3] + " <b>vs #6 Auburn</b>"]
},
usce: {
    rank: 9,
    conf: "SEC",
    sched: 
        [gameDays.week1[0] + " <b>vs #21 Texas A&M, LOSS (28-52)</b>",
        gameDays.week2[2] + " <b>vs East Carolina</b>",
        gameDays.week3[2] + " <b>vs #12 Georgia</b>",
        gameDays.week4[2] + " <b>at Vanderbilt</b>",
        gameDays.week5[2] + " <b>vs #24 Missouri</b>",
        gameDays.week6[2] + " <b>at Kentucky</b>",
        gameDays.week8[3] + " <b>vs Furman</b>",
        gameDays.week9[3] + " <b>at #6 Auburn</b>",
        gameDays.week10[2] + " <b>vs Tennessee</b>",
        gameDays.week12[4] + " <b>at Florida</b>",
        gameDays.week13[4] + " <b>vs South Alabama</b>",
        gameDays.week14[3] + " <b>at #16 Clemson</b>"]
},
texasam: {
    rank: 21,
    conf: "SEC",
    sched: 
        [gameDays.week1[0] + " <b>at #9 South Carolina, WIN (52-28)</b>",
        gameDays.week2[2] + " <b>vs Lamar</b>",
        gameDays.week3[2] + " <b>vs Rice</b>",
        gameDays.week4[2] + " <b>at SMU</b>",
        gameDays.week5[2] + " <b>vs Arkansas</b>",
        gameDays.week6[2] + " <b>at Mississippi State</b>",
        gameDays.week7[2] + " <b>at #18 Ole Miss</b>",
        gameDays.week8[3] + " <b>at #2 Alabama</b>",
        gameDays.week10[2] + " <b>vs UL-Monroe</b>",
        gameDays.week11[4] + " <b>at #6 Auburn</b>",
        gameDays.week12[4] + " <b>vs #24 Missouri</b>",
        gameDays.week14[1] + " <b>vs #13 LSU</b>"]
}

循序渐进,尽我所能:

1) 解析URL(即"../folder/texasam.html")以获得所需的字符串,然后将该团队名称存储在一个变量中,以供以后参考(CODE WORKING)

function parseURL() {
  var match = window.location.href.match(/('w+).html$/);
  if (match) {
    return match[1];
  }
  return null;
}
var teamElim = parseURL();

2) 在步骤1中设置变量以保持其等级值,以便稍后参考(代码工作)

var teamRank = teams[teamElim].rank;

3) 在嵌套在对象的子对象中的特定元素(数组)上迭代(代码不工作)

function iterateTeams() {
    for (var team in teams) {
            console.log(team);
        }
}
iterateTeams()

因此,这至少有一些的承诺,因为我能够实际迭代"teams"对象中的每个"team"值。I、 然而,就我的一生而言,我无法弄清楚如何在不获得返回值"undefined"的情况下进一步深入children对象的元素,特别是.rank(或稍后的.sched键)。

4) 在这里,我需要检查每个子对象的.rank键值,以创建所有团队的子集,该子集的秩值大于"teamRank"变量,在本例中为"21"。(没有工作代码,只是理论化)

这是我真正迷路的地方。我认为这或多或少应该看起来像这样,也许?:

function rankCheck(a, b) {
    var finalRankSubset = (a < b);
    if(teamRank.valueOf() < newRankSubset.valueOf()); {
        //RIGHT HERE I AM ESPECIALLY LOST
    }
}

我有两个问题:

a) 如何存储newRankSubset值(也许我需要找到一种动态创建数组的方法?)?

b) 我以后该如何解析?尽管如此,我觉得我最大的问题是,由于我可以"深入"子对象的元素,所以我无法尝试测试如何正确地调用、解析并存储这些数据以备将来使用。

5) 现在,我需要遍历这个新的数据子集,其中包含排名在"21"以上的所有团队,然后检查存储在.sched键中的字符串中的子字符串"LOSS"。(根本没有代码)

在这里,我几乎在问与上面"b"中相同的问题:我如何获取排名在"texasam"(21)以上的所有团队的捕获子集数据,然后检查他们的.sched密钥中的子字符串"LOSS"?

考虑到我已经迷失在上面,我甚至不知道从哪里开始,我真的很感激任何帮助。

6) 最后,我需要将所有这些插入到一个div中,在本例中是div id"threatText"。我认为下面的代码会起作用,只是我有99.999%的把握需要更改实际的document.write()值:

function deliverTeams() {
    document.getElementById('threatText').innerHTML;
    document.write(teams[teamSched].sched.join("<br>"));
}

在不得不寻求帮助之前,我几乎要用这些数据完成我的另一个项目了(非常感谢我得到的帮助!),尽管我很清楚我想在这里做什么,而且在某些地方,我认为我至少理解了完成这项工作所需的一部分代码,但我认为我比以前的项目要远得多。

我希望这不会让人觉得我要求别人帮我写代码,因为这不是我的愿望,我非常高兴能和任何愿意提供指导的人一起度过难关。我真的已经尽了最大的努力来确定这一点,不幸的是,作为一个程序员,我现在太幼稚了,无法独自完成这一点。

非常感谢您愿意提供的任何帮助和指导!

在团队中迭代(步骤3)时,您的问题是…的。。在语句for (var team in teams)中,它遍历对象的属性名,而不是像您可能假设的那样遍历属性及其实例。因此,您必须获得属性值:

function iterateTeams() {
    for ( var teamName in teams ) {       
            var team = teams[teamName];
            console.log('TEAM: ' + teamName);
            ...

既然您有了团队的参考,就可以访问其sched数组:

            ...
            for ( var i = 0; i < team.sched.length; i++ ) {
                var schedDay = team.sched[i];
                console.log(schedDay);
            }
    }