搜尋

首頁  >  問答  >  主體

使用Vue對數字進行排序

我有vue資料:

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

我需要使用選定的樓層來篩選表格行。過濾工作正常,但過濾器中選定樓層的順序為 10, 11, 12, 3, 4, 5

我的方法中有這個函數

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;
            });
          }

這個計算不足

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;
          },

這是我的 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>

知道我缺少什麼以及如何將這些樓層顯示為 3、4、5、10、

P粉398117857P粉398117857241 天前464

全部回覆(2)我來回復

  • P粉675258598

    P粉6752585982024-03-27 12:52:27

    例如,您需要使用 Number('3') 將樓層轉換為數字。這將在數字之間進行比較,而不是在字串之間進行比較。

    當您比較字串時,您將得到字母順序排序(字典順序),例如 10 < 2

    這是固定排序函數:

    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 < floorB) {
              return -1;
          }
    
          return 0;
     });

    要了解有關類型轉

    回覆
    0
  • P粉182218860

    P粉1822188602024-03-27 09:53:03

    您正在比較字串而不是數字。字串 101112 低於 23。在比較之前使用 parseInt 轉換字串。

    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) < parseInt(b.acf.floor)) {
          return -1;
        }
        return 0;
      });
    
      sorted.forEach((office) => {
        set.add(office.acf.floor);
      });
    
      return set;
    },
    

    回覆
    0
  • 取消回覆