Salut, je suis débutant dans le langage javascript. Je voudrais une personne me fasse le code pour cela et qui m'explique un peu pour après . j'ai fais un début d'archictecture de code mais je sais pas quoi mettre dans la fonction.

Cities

| Id | Population |Urban Area|Natural Area|

| 0 | 200 | 30 | 10 |
| 1 | 440 | 25 | 40 |
| 2 | 120 | 40 | 40 |
| 3 | 800 | 50 | 20 |
| 4 | 700 | 30 | 80 |

function OrderCities(cities)
{

}

const cities = {};
let q1_result = OrderCities(cities);
console.log(q1_result); // Expected output: [4, 1, 3]

Ce que je veux

Ecrire une fonction qui ordonne les 3 villes les plus densément peuplées par leur rapport zone urbaine/zone naturelle (ordre croissant).
Ce que j'obtiens

Décrivez vos éventuelles erreurs ou ce que vous obtenez à la place de ce que vous attendez :(

6 réponses


Balsakup
Réponse acceptée

Désolé, j'ai pas utilisé ton template.. Voilà, tu devrais t'y retrouver

// Pas de majuscule au début, c'est moche
function orderCities(cities) {
  cities.sort(function (a, b) {
      // Densité des habitants
      // Poulation / surface
      const aDensity = a.population / (a.urban_area + a.natural_area);
      const bDensity = b.population / (b.urban_area + b.natural_area);

      // Si la densité de a < b, alors en met a avant
      if (aDensity < bDensity) {
          return -1;
      }

      // Si la densité de a > b, alors on met a après
      if (aDensity > bDensity) {
          return 1;
      }

      // Sinon, il reste à sa place
      return 0;
  });

  return cities.slice(-3);
}

const cities = [
    {
        id: 0,
        population: 200,
        urban_area: 30,
        natural_area: 10
    },
    {
        id: 1,
        population: 440,
        urban_area: 25,
        natural_area: 40
    },
    {
        id: 2,
        population: 120,
        urban_area: 40,
        natural_area: 40
    },
    {
        id: 3,
        population: 800,
        urban_area: 50,
        natural_area: 20
    },
    {
        id: 4,
        population: 700,
        urban_area: 30,
        natural_area: 80
    }
];
// Pas de snakecase pour les variables, c'est moche
const q1Result = orderCities(cities);
console.log(q1Result); // Expected output: [4, 1, 3]

Salut, ça fait 3 postes sur le forum où tu demandes qu'on produise du code pour toi sans même essayer, tes peut être débutant en JS, mais faut se poser des questions. Google et ses potes, moteurs de recherche, sont nos amis, MDN (Mozilla Developer Network) et un grand ami des devs fronts.

Pour chacun de tes postes sur le forum, je trouve la solution en 2 secs (vraiment 2 secs) sur Google qui me donne des résultats de StackOverflow (encore un grand ami des devs), cherche un minimum avant de poster sur le forum.

Rechercher et galérer c'est sûrement le meilleur moyen d'apprendre.

https://stackoverflow.com/questions/1129216/sort-array-of-objects-by-string-property-value

kingja
Auteur

salut, oui en effet j'ai déja fait des recherches je m'y prend peut être mal , le problème que je rencontre surtout c'est es que je fait 1 seul tableau d'array qui contient tous ses élements ou bien un plusieurs ?

Voilà, avec mon ami StackOverflow et calculs basiques de mathématique

const cities = [
    {
        id: 0,
        population: 200,
        urban_area: 30,
        natural_area: 10
    },
    {
        id: 1,
        population: 440,
        urban_area: 25,
        natural_area: 40
    },
    {
        id: 2,
        population: 120,
        urban_area: 40,
        natural_area: 40
    },
    {
        id: 3,
        population: 800,
        urban_area: 50,
        natural_area: 20
    },
    {
        id: 4,
        population: 700,
        urban_area: 30,
        natural_area: 80
    }
];

function compare(a, b) {
    // Densité des habitants
    // Poulation / surface
    const aDensity = a.population / (a.urban_area + a.natural_area);
    const bDensity = b.population / (b.urban_area + b.natural_area);

    // Si la densité de a < b, alors en met a avant
    if (aDensity < bDensity) {
        return -1;
    }

    // Si la densité de a > b, alors on met a après
    if (aDensity > bDensity) {
        return 1;
    }

    // Sinon, il reste à sa place
    return 0;
}

cities.sort(compare);

const top3ByDensity = cities.slice(-3);
kingja
Auteur

d'accord merci donc si j'ai bien compris la fonction compare remplacerait ? Ma fonction OrderCities qui prend en paramètre cities

kingja
Auteur

ah d'accord je savais pas pour les snakecase merci bien :)