Trier les nombres à l'aide de Vue
P粉398117857
P粉398117857 2024-03-26 18:07:09
0
2
466

J'ai des données de vue :

data: {
          offices: requestData,
          selectedFloors: [
            "3",
            "4",
            "5",
            "10",
            "11",
            "12",
          ],
          minJobAngle: 0,
          maxJobAngle: 80,
          minAreaAngle: 0,
          maxAreaAngle: 900
        }

Je dois filtrer les lignes du tableau en utilisant Étages sélectionnés. Le filtrage fonctionne bien mais l'ordre des étages sélectionnés dans le filtre est 10, 11, 12, 3, 4, 5

J'ai cette fonction dans ma méthode

getFilteredOffices() {
            const areaMin = this.sliderAreaMin;
            const areaMax = this.sliderAreaMax;
            const jobsMin = this.sliderJobMin;
            const jobsMax = this.sliderJobMax;
            const floors = this.selectedFloors;
            return this.offices.filter(function (item) {

              if (item.acf.suurus < areaMin || item.acf.suurus > areaMax) {
                return false;
              }
              if (item.acf.tookohad < jobsMin || item.acf.tookohad > jobsMax) {
                return false;
              }
              if (!floors.includes(item.acf.floor)) {
                return false;
              }
              return true;
            });
          }

Ce calcul est insuffisant

getAvailableFloors() {
            const set = new Set();

            const sorted = this.offices.sort((a, b) => {
              if (a.acf.floor > b.acf.floor) {
                return 1;
              }
              if (a.acf.floor < b.acf.floor) {
                return -1;
              }
              return 0;
            });

            sorted.forEach((office) => {
              set.add(office.acf.floor);
            });

            return set;
          },

C'est mon html

<label :class="['checkbox-label floor' + item]" v-for="item in this.getAvailableFloors">
   <input type="checkbox" name="floor" :value="item" v-model="selectedFloors"> @{{ item }}
   <span class="checkmark"></span>
</label>

Une idée de ce qui me manque et comment afficher ces étages sous la forme 3, 4, 5, 10, 11, 12 ?

P粉398117857
P粉398117857

répondre à tous(2)
P粉675258598

Par exemple, vous devez utiliser Number('3') pour convertir les étages en nombres. Cela comparera les nombres, pas les chaînes.

Lorsque vous comparez des chaînes, vous obtenez un ordre alphabétique (ordre lexicographique) comme 10 < 2.

C'est la fonction de tri fixe :

const sorted = this.offices.sort((a, b) => {
      const floorA = Number(a.acf.floor);
      const floorB = Number(b.acf.floor);
          
      if (floorA > floorB) {
           return 1;
      }
      
      if (floorA 

Pour en savoir plus sur la conversion de type, voir ici : https://developer.mozilla.org/en-US/docs/Glossary/Type_Conversion

P粉182218860

Vous comparez des chaînes et non des nombres. String 101112 低于 23。在比较之前使用 parseInt Convertit une chaîne.

getAvailableFloors() {
  const set = new Set();

  const sorted = this.offices.sort((a, b) => {
    if (parseInt(a.acf.floor) > parseInt(b.acf.floor)) {
      return 1;
    }
    if (parseInt(a.acf.floor)  {
    set.add(office.acf.floor);
  });

  return set;
},
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal