2016-04-14 4 views
0

Wenn gegeben ein Skript wie Überspringen:Javascript: Wie Objekt iterieren [Schlüssel: Wert], aber einige Tasten ([schnellster Weg möglich])

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Test DOC</title> 

<script type="text/javascript" src="../nt_scr/jq_1.9.js"></script> 

<script type="text/javascript"> 

var mainObj = { 0: { "fruitName":"Lemon", 
         "fruitColor":"green",  
         "fruitTaste":"bad"}, 

       1: { "fruitName":"Mango", 
         "fruitColor":"Yellow",  
         "fruitTaste":"Yammy"}, 
       2: { 


         "fruitName":"Banana", 
         "fruitColor":"Yellow",  
         "fruitTaste":"Yammy"}, 


       "skip_these": 

        { 
         "team1":"Liverpool", 
         "team2":"Manchester United" 

         } 

} 

var collect_data = $.parseJSON(JSON.stringify(mainObj)), 
    getFruitNames=[],getFruitColors=[], getFruitTastes=[]; 

$.each(collect_data,function(index,val){ 

    //console.log(val); //Un-comment this console.log to see the contents of 'val' 

    //----->Here is the Challenge:,---------\\\ 
    if(/*How do you SKIP if val is something like */ "val.team1" || "val.team2"){ 

    getFruitNames.push(val.fruitName); 
    getFruitColors.push(val.fruitColor); 
    getFruitTastes.push(val.fruitTaste); 

     //This works well so long as we have not yet reached the "skip_these": 
     //Once there, it reports an error because there is no "skip_these".fruitName or "skip_these".fruitColor 
     } 

     console.log(getFruitNames[index])// Run a test out put :: NOTICE the "Undefined" in the Console. How to avoid that? 
     //To see well, Comment the previous console.log <<the one on top>> 
    }) 


</script> 
</head> 

<body> 


</body> 
</html> 

ich das manchmal hätte vor, aber irgendwie, mein Gehirn ist nur blank jetzt .... Jeder Vorschlag wird sehr geschätzt. (Bitte führen Sie mit Ihrem jQuery)

+0

was die Logik, einige "Schlüssel" zu überspringen? Welche Schlüssel sollten übersprungen werden und welche nicht? – gurvinder372

+0

Sie können eine Iteration in $ .each überspringen, indem Sie true zurückgeben –

+0

Wenn Sie den CODE ausführen, beachten Sie die "Undefined" in der Konsole. – ErickBest

Antwort

1

Als JQuery docs Zustand

Nicht-falsch zurückgeben ist dasselbe wie eine continue-Anweisung in einer for-Schleife; wird sofort zur nächsten Iteration übersprungen. So

nach Ihrem Beispiel können Sie die Objekte mit den Eigenschaften überspringen Sie nicht brauchen, mit dem folgenden:

JavaScript

$.each(collect_data,function(index,val){ 

    //console.log(val); //Un-comment this console.log to see the contents of 'val' 

    //----->Here is the Challenge:,---------\\\ 
    if(val.team1 || val.team2){ 
     return true; 
    } 

    getFruitNames.push(val.fruitName); 
    getFruitColors.push(val.fruitColor); 
    getFruitTastes.push(val.fruitTaste); 

     //This works well so long as we have not yet reached the "skip_these": 
     //Once there, it reports an error because there is no "skip_these".fruitName or "skip_these".fruitColor 


     console.log(getFruitNames[index])//No "Undefined" 
    }) 

https://plnkr.co/edit/9vOACIpnlWRtSWjmAm5x?p=preview

0

(nicht jquery - Vanille) Iterate Eigenschaften und überspringen bestimmte Tasten: (nicht für Syntax testen, aber es sollte in Ordnung sein)

var skipped = ['keySkipped']; 
    for (var someProperty in someObject) { 
     if (someObject.hasOwnProperty(someProperty) && skipped.indexOf(someObject[someProperty] === -1)) { 
      // do stuff 
     } 
    } 

Erläuterung: iterate Eigenschaften und wenn propertie in der Tat wird durch das Objekt enthält, aber nicht in skiped enthalten tun, was

+0

Wie fügen Sie das zum Code in der Frage hinzu, die jQuery ... verwendet? – ErickBest

+0

JQuery ist nur eine Bibliothek auf JS (oft referiert Vanilla), als Ergebnis können Sie überall, wo Sie ein Objekt haben. - Ich werde einige Namen ändern, um es klarer für dich zu machen. –

+0

Danke .... Ich möchte wirklich '' .each'' verwenden, aber ... Das Ändern zu 'vanila' würde bedeuten, dass ich über ** 180 ** verschiedene' Skripte durchforste 'in verschiedenen' Verzeichnissen', um '' .each' 'zu 'vanila' zu ändern ... das wird eine weitere monumentale Aufgabe für sich sein ... Danke! – ErickBest