Getting Object.prototype.hasOwnProperty() key

Getting Object.prototype.hasOwnProperty() key

本文关键字:key hasOwnProperty Object prototype Getting      更新时间:2023-09-26

我正在开发一个简单的网站,该网站使用 json 来获取数据。

代码如下所示:

指数:

<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
    <meta name="apple-mobile-web-app-capable" content="yes" />
    <meta name="mobile-web-app-capable" content="yes" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Linköping</title>
    <link type="text/css" rel="stylesheet" media="all" href="css/main.css" />
    <script type="text/javascript" src="js/jquery-2.1.4.min.js"></script>
    <script type="text/javascript" src="js/textmetrics.js"></script>
    <script type="text/javascript">
    var config = {
        // General config
        slideTime: 15*1000,
        fadeTime: 3*1000,

        // Time
        timeUpdate: 60*1000,
        // Names
        nameDayUrl: 'namedays.json',
        nameUpdate : 60*1000,
        // Events
        eventUrl: 'Idrottsevent.json',
        eventUpdate : 1*1000,
        // Weather
        weatherUrl: 'http://api.openweathermap.org/data/2.5/find?lat=58.41&lon=15.62&cnt=1&units=metric&appid=2de143494c0b295cca9337e1e96b00e0',
        weatherUpdate: 1800*1000
    }
    </script>

<div class="slide304" id="eventSlide">
    <div class="center">
        <div id="gameTicker1"></div>
    </div>
</div>
<div class="slide304" id="eventSlide">
    <div class="center">
        <div id="gameTicker2"></div>
    </div>
</div>
<div class="slide304">
    <div class="center">
        <div id="weatherTicker"></div>
    </div>
</div>  
<script type="text/javascript">
    // Global data 
    var _names = {};
    var _events = {};
    var _games = {};
$(document).ready(function() {
        // Get events
        $.ajax({
            url: config.eventUrl,
            async: true,
            cache: false,
            method: 'GET',
            success: function(result) {
                _games = result;
                setGame1();
                setGame2();
            },
            error: function(xhr, status, error) {
                _games = {};
            }
        });
function setGame1() {
        // Select game.
        var nowDate = getTimeForEvents();
        var mm = addZero(nowDate.getMonth() + 1);
        var d = addZero(nowDate.getDate());
        var key = mm + "-" + d + "A";
        var game = (typeof _games[key] != "undefined") ? _games[key] : "";
        $('#gameTicker1').html((game == '') ? '' : game);
        setFontSizeForCurrentSlide();
        setTimeout(setGame1, config.eventUpdate);
    }
        function setGame2() {
        // Select game.
        var nowDate = getTimeForEvents();
        var mm = addZero(nowDate.getMonth() + 1);
        var d = addZero(nowDate.getDate());
        var key = mm + "-" + d + "B";
        var game = (typeof _games[key] != "undefined") ? _games[key] : "";
        $('#gameTicker2').html((game == '') ? '' : game);
        setFontSizeForCurrentSlide();
        setTimeout(setGame2, config.eventUpdate);
    }

该代码检查当天每个游戏的日期和月份以及附加的字母。如果一天有两场比赛,那么游戏一有"A",游戏二有"B",依此类推。

现在,网站在JavaScript(SetGame1,SetGame2)中滑动浏览每个游戏。它在显示第一个游戏后显示一个深色幻灯片,因为 json 上只有一个游戏。我希望它做的是检查并确保它只滑动可用的游戏,并跳过 json 上不可用的游戏。如果该 json 上只有一个游戏,则不应尝试显示 GameSet2。

完整的 Json:

{
 "12-27": [
                              "Dagens match:<br />KFUM Linköping-Falcao FC Stockholm<br />13:00 Linköpings Sporthall"                                                       
 ],

 "12-28": [
                              "Dagens match:<br />LHC-Rögle BK<br />19:00 SAAB ARENA"
 ],

 "12-30": [
                              "Dagens match:<br />LHC-Örebro Hockey<br />19:00 SAAB ARENA"                             ],

 "01-02": [
                              "Dagens match:<br />Linköping Innebandy-Malmö FBC<br />14:10 SAAB ARENA",
"Dagens match:<br />Linköping Innebandy-Växjö IBK<br />17:10 SAAB ARENA"
 ],

 "01-08": [
                              "Dagens match:<br />KFUM Linköping- Spartak Örebro Futsal Club<br />20:00 Linköpings Sporthall"
 ],

 "01-10": [
                              "Dagens match:<br />Linköping Innebandy-Pixbo Wallenstam IBK<br />13:00 Folkungahallen",
                              "Dagens match:<br />Linköping Innebandy- FC Helsingborg<br />17:00 Linköpings Sporthall"
 ],
 "01-13": [
                              "Dagens match:<br />Linköping Innebandy-IK Sirius IBK<br />19:00 Linköpings Sporthall"
 ],

 "01-14": [
                              "Dagens match:<br />LHC-Färjestads BK<br />19:00 SAAB ARENA"
 ],

 "01-16": [
                              "Dagens match:<br />Linköpings VC-Örkeljunga<br />15:00 Linköpings Sporthall"
 ],

 "01-17": [
                              "Dagens match:<br />Linköping Innebandy-IBF Falun<br />13:00 Folkungahallen",
                              "Dagens match:<br />RP IF-GF Kroppskultur<br />13:30 Linköpings Sporthall",
                              "Dagens match:<br />RP IF Linköping-HK Silwing/Troja<br />16:00 Linköpings sporthall"
 ],
 "01-23": [
                              "Dagens match:<br />Linköping VC-KFUM Eskilstuna volley<br />15:00 Folkungahallen",
                              "Dagens match:<br />LHC-Frölunda HC<br />16:00 SAAB ARENA"
 ],

 "01-24": [
                              "Dagens match:<br />Linköpings VC-Hylte Halmstad<br />15:00 Linköpings sporthall"
 ],

 "01-25A":                     "Dagens match:<br />TEST Linköpings VC-Hylte Halmstad<br />15:00 Linköpings sporthall",

"01-27": [
                              "Dagens match:<br />Linköpings VC-Södertelge<br />19:00 Linköpings sporthall"
                                                        ],

"01-29": [
                                                          "Dagens match:<br />Linköping Innebandy-Endre IF<br />19:30 Folkungahallen",
                                                          "Dagens match:<br />Linköping HC-MODO Hockey<br />19:00 Stångebro Ishall"
                             ],
"01-30": [
                                                          "Dagens match:<br />LHC-HV71<br />18:30:SAAB ARENA",
                                                          "Dagens match:<br />Linköping VC-Sollentuna<br />13:00 Folkungahallen",
                                                          "Dagens match:<br />Linköping HC-Brynäs IF<br />16:00 Stångebro Ishall",
                            "Dagens match:<br />Linköping Innebandy-Warberg IC<br />15:00 Linköpings Sporthall"
                             ],

"01-31": [
                                                          "Dagens match:<br />Linköping HC-IF Sundsvall Hockey<br />12:00 Stångebro Ishall",
                                                          "Dagens match:<br />RP IF Linköping-Tyresö Handboll<br />13:30 Linköpings sporthall",
                                                          "Dagens match:<br />RP IF Linköping-Brännans HF<br />16:00 Linköpings sporthall"
                             ],

"02-04": [
                                                          "Dagens match:<br />LHC-MODO Hockey<br />19:00 SAAB ARENA"
                             ],

"02-13": [
                                                          "Dagens match:<br />RP IF Linköping-Lidingö SK<br />13:30 Linköpings sporthall",
                                                          "Dagens match:<br />RP IF Linköping-HK GP<br />16:00 Linköpings sporthall",
                                                          "Dagens match:<br />Linköping Innebandy-IBK Dalen<br />14:30 Motala Sporthall"
                             ],
"02-16": [
                                                          "Dagens match:<br />LHC-Skellefteå AIK<br />19:00 SAAB ARENA"
                             ],
"02-19": [
                                                          "Dagens match:<br />Linköping Innebandy-Pixbo Wallenstam IBK<br />19:00 Linköpings Sporthall"
                             ],
 "02-20": [
                                                          "Dagens match:<br />LHC-Växjö Lakers<br />16:00 SAAB ARENA",
                                                          "Dagens match:<br />Linköpings VC-Västerås VBK<br />15:00 Folkungahallen",
                                                          "Dagens match:<br />Linköping HC-SDE HF<br />12:00 Stångebro Ishall"
                             ],
 "02-21": [
                                                          "Dagens match:<br />Linköping HC-Leksands IF<br />13:00 SAAB ARENA",
                                                          "Dagens match:<br />Linköping Innebandy-Rönnby Västerås IBK<br />13:00 Folkungahallen"
                             ],


 "02-24": [
                                                          "Dagens match:<br />Linköpings VC-Sollentuna<br />19:00 Linköpings sporthall",
                                                          "Dagens match:<br />LHC-Rögle BK<br />19:00 SAAB ARENA"
                             ],
 "02-26": [
                                                          "Dagens match:<br />Linköping Innebandy-Huddinge IK<br />19:30 Folkungahallen"
                             ],
"02-27": [
                                                          "Dagens match:<br />Linköpings VC-Tierp<br />15:00 Linköpings sporthall",
                                                          "Dagens match:<br />RP IF Linköping-Skara HF<br />13:30 Linköpings sporthall",
                                                          "Dagens match:<br />LHC-Brynäs IF<br />18:30 SAAB ARENA",
                            "Dagens match:<br />RP IF Linköping-Mantorps IF HF<br />16:00 Linköpings sporthall"
                             ],

 "03-01": [
                                                          "Dagens match:<br />LHC-Örebro Hockey<br />19:00 SAAB ARENA"
                             ],

"03-05": [
                                                          "Dagens match:<br />Linköpings VC-Jomala IK<br />15:00 Folkungahallen",
                                                          "Dagens match:<br />LHC-HV71<br />16:00 SAAB ARENA",
                                                          "Dagens match:<br />Linköping Innebandy-IBK Dalen<br />17:15 Linköpings Sporthall"
                             ],

"03-08": [
                                                          "Dagens match:<br />LHC-Malmö Redhawks<br />19:00 SAAB ARENA"
                             ],

"03-09": [
                                                          "Dagens match:<br />Linköpings VC-Vingåker<br />19:00 Linköpings sporthall"
                             ],

"03-19": [
                                                          "Dagens match:<br />Linköpings VC-Rissne IF<br />15:00 Folkungahallen",
                                                          "Dagens match:<br />RP IF Linköping-Skånela IF<br />17:00 Linköpings sporthall"
                             ],

"03-20": [
                                                          "Dagens match:<br />RP IF Linköping-Enköpings HF<br />15:00 Linköpings sporthall"
                             ]
}

据我了解,这可以通过使用Object.prototype.hasOwnProperty()

来解决
_games = result;
if(_games.hasOwnProperty("game1")) // assuming game1 is the key for game1, replace it with the actual key.
  setGame1();
if(_games.hasOwnProperty("game2"))
  setGame2();

问题是我不知道每个游戏的密钥。怎么知道每个系列游戏有什么键?

可以使用Object.keys(obj)检索对象键

您可以使用

Object.keys()

var obj = {
   key1: 'val1',
   key2: 'val2',
   key3: 'val3'
}
Object.keys(obj)
 -> ["key1", "key2", "key3"]

或者您也可以执行以下操作:

function getKeys(obj) {
    var keys = []
    for (var k in obj) {
        if (!obj.hasOwnProperty(k)) 
            continue
        keys.push(k)
    }
    return keys
}
var keys = getKeys({'key1': "val1", 'key2': "val2"});
console.log(keys);