Just nu i M3-nätverket
Gå till innehåll

Kombinera två arrayer


Jompan

Rekommendera Poster

Jag har en filmlista som ska kombineras med titel och betyg. 

<h2>En enkel filmlista</h2>

<button type="button" onclick="listMovies()">Hela filmlistan</button>
<button type="button" onclick="listMoviesUpp()">Hela filmlistan i stigande ordning</button>
<button type="button" onclick="listMoviesNer()">Hela filmlistan i fallande ordning</button>

<hr>

<h2>En filmlista med betyg</h2>

<button type="button" onclick="listRatings()">Betygslista</button>
<button type="button" onclick="printMovies()">Filmer med betyg</button>

<hr>

<div id="result"></div>

var resultTag;
var movies = new Array();
var ratings = new Array();

function getMovies() {
  movies[0]="Broarna i Madison County";
  movies[1]="Forrest Gump";
  movies[2]="Sjunde himlen";
  movies[3]="Den bästa av mödrar";
  movies[4]="Tjorven och Mysak";
  resultTag = document.getElementById("result");
}

function listMovies() {
  getMovies();
  resultTag.innerHTML += "<br><b>Filmer i osorterad ordning</b> <br>" + movies.join("<br>");
} 

function listMoviesUpp() {
  getMovies();   
  resultTag.innerHTML += "<br><b>Filmer i stigande ordning</b> <br>" + movies.sort().join("<br>");
}

function listMoviesNer() {
  getMovies();
  resultTag.innerHTML += "<br><b>Filmer i fallande ordning</b> <br>" + movies.reverse().join("<br>");
}

function getRatings() {
  ratings[0]=5;
  ratings[1]=3;
  ratings[2]=1;
  resultTag = document.getElementById("result");
} 

function listRatings() {
  getRatings();
  resultTag.innerHTML += "<br><b>Betyg</b> <br>" + ratings.join("<br>");
} 

var addMovies = function(movies, rating) {
movies.push(movies) 
ratings.push(ratings) 
}
	
function printMovies() {
	for(var i = 0; i < 5; i++) {
	addMovies = movies[i] + ratings[i];
	resultTag.innerHTML += "<br><b>Betyg</b> <br>" + ratings.join("<br>");
	}
}

Utskrift av sortering i olika ordning funkar. Men i nästa etapp med betygsättningen, så får jag bara ut betygslistan (1-5), men förstår inte hur jag ska kombinera resp film med rätt betyg.

 

Några idéer?

 

// Jompan

 

 

Länk till kommentar
Dela på andra webbplatser

Jag skulle nog ha skapat en tvådimensionell array för att hantera film och betyg, typ:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>345418 @ eForum</title>
    <script>
      var movieTable, tableStart, tableRows, tableEnd ;
      var movies = [
        ["Broarna i Madison County", 2],
        ["Forrest Gump", 5],
        ["Sjunde himlen", 1],
        ["Den bästa av mödrar", 3],
        ["Tjorven och Mysak", 4]
      ];  
      
      function init() {
        listMovies();
        document.getElementById("result").innerHTML = movieTable;
      } 
      window.onload = init;
      
      function listMovies() {
        tableStart="<table><thead><tr><th>Titel</th><th>Betyg</th></tr></thead><tbody>";
        tableEnd="</tbody></table>";
        tableRows="";
        for (i=0; i<movies.length; i++) {  
          tableRows += "<tr><td>" + movies[i][0] + "</td><td>" + movies[i][1] + "</td></tr>";
        }
        movieTable = tableStart + tableRows + tableEnd
      }

      function sortMovies(sortBy, sortOrder) {
        if (sortBy == 'title') {
          if (sortOrder == 'asc') {
            movies.sort(function(a,  { return (a[0] < b[0] ? -1 : (a[0] > b[0] ? 1 : 0)); });
          };
          if (sortOrder == 'desc') {
            movies.sort(function(a,  { return (a[0] > b[0] ? -1 : (a[0] < b[0] ? 1 : 0)); });
          };
        };
        
        if (sortBy == 'rating') {
          if (sortOrder == 'asc') {
            movies.sort(function(a,  { return (a[1] < b[1] ? -1 : (a[1] > b[1] ? 1 : 0)); });
          };
          if (sortOrder == 'desc') {
            movies.sort(function(a,  { return (a[1] > b[1] ? -1 : (a[1] < b[1] ? 1 : 0)); });
          };
        };

        listMovies();
        document.getElementById("result").innerHTML = movieTable;  
      }
      
    </script>
  </head>
  <body>
    <div>
      <button type="button" onclick="sortMovies('title','asc')">Sortera på Titel i stigande ordning</button>
      <button type="button" onclick="sortMovies('title','desc')">Sortera på Titel i fallande ordning</button>
      <button type="button" onclick="sortMovies('rating','asc')">Sortera på Betyg i stigande ordning</button>
      <button type="button" onclick="sortMovies('rating','desc')">Sortera på Betyg i fallande ordning</button>
      <div id="result"></div>
    </div>
  </body>
</html>
Länk till kommentar
Dela på andra webbplatser

Tack för en tydlig lösning, men jag var nog otydlig i min frågeställning.
I uppdraget ingår att använda 'push' för att lägga till en parameter i en befintlig array. Och det är där jag fastnar.

 

// Jompan

Länk till kommentar
Dela på andra webbplatser

ChromaWoods

Jag skulle skapa en array med objekt. Du har movies och ratings, men i framtiden kanske du vill associera ännu fler saker med en film. Då kommer dina multidimensionella arrayer bli en mardröm.

var movies = [
    {
        "title": "A Clockwork Orange",
        "rating": 4.5,
        "director": "Stanley Kubrick"
    },
    {
        "title": "King Kong",
        "rating": 3,
        "director": "Peter Jackson"
    }
];

Då blir dessutom koden mer läsbar, eftersom du då kan addressera attributen med deras namn, t,ex movies.title osv. Du skulle isåfall behöva skriva om sorterings-funktionen.

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...