簡體   English   中英

VueJS - 使下拉列表按字母順序顯示

[英]VueJS - Make the drop-down list display alphabetically

我正在嘗試按字母順序對列表進行排序,但沒有任何成功。

我有一個計算屬性,它使用 Axios 提取數據。 它刪除所有重復項並在每個逗號處拆分對象數組。 這很好用。

我嘗試了各種方法來嘗試顯示列表 AZ inc。 下面的例子。

有人會好心幫忙嗎?

數據如下所示:

"C": "UK, EU, EEA, UK and Islands, England Wales & Northern Ireland, International, UK, EU, EEA, UK and Islands,England Wales & Northern Ireland",

我的計算屬性是這樣的:

computed: {
    nationalities() {
      return this.results.filter((result) => result.metaData.C);
    },

    uniquenationalities() {
      // All unique nationalities in metaC
      const metaGnationalities = this.results
        .filter((result) => result.metaData && result.metaData.C)
        .map((item) => item.metaData.C)
        .filter((nationality, i, arr) => arr.indexOf(nationality) === i);
      // Split multiple nationalities in strings and store in an array
      let nationalities = [];
      metaGnationalities.forEach((item) => {
        const splitArr = item.split(", ");
        nationalities = nationalities.concat(splitArr);
      });
       
       let nationalities2 = [];
      nationalities2.sort(function(a, b) {
        if (a.nationalities2 < b.nationalities2) {
           return -1;
         }
         if (a.nationalities2 > b.nationalities2) {
           return 1;
         }
         return 0;
       });

      // debugger;
      // Filter again for unique nationalities
      return nationalities2.filter(
        (nationality, i, arr) => arr.indexOf(nationality) === i
      );
    },
  },
};

您當前正在對一個空數組( nationalities2 )進行排序。 相反,對nationalities進行排序。

sort()方法對數組的元素進行就地排序並返回排序后的數組。

以下是如何解決此問題的簡化示例:

// Assuming there is a typo in the last comma (missing space after it)
const C = "UK, EU, EEA, UK and Islands, England Wales & Northern Ireland, International, UK, EU, EEA, UK and Islands, England Wales & Northern Ireland";

function uniquenationalities(inputString) {
  const nationalities = inputString.split(", ");

  // Instead of sorting 'nationalities2',
  // sort, filter, and return 'nationalities'
  return nationalities
    .sort()
    .filter(
      (nationality, i, arr) =>
        arr.indexOf(nationality) === i
    );
}

console.log(uniquenationalities(C))

哪些日志:

[
  "EEA",
  "EU",
  "International",
  "UK",
  "UK and Islands",
]

完整修改后的代碼將是:

computed: {
  nationalities() {
    return this.results.filter((result) => result.metaData.C);
  },

  uniquenationalities() {
    // All unique nationalities in metaC
    const metaGnationalities = this.results
      .filter((result) => result.metaData && result.metaData.C)
      .map((item) => item.metaData.C)
      .filter((nationality, i, arr) => arr.indexOf(nationality) === i);

    // Split multiple nationalities in strings and store in an array
    let nationalities = [];
    metaGnationalities.forEach((item) => {
      const splitArr = item.split(", ");
      nationalities = nationalities.concat(splitArr);
    });

    return nationalities
      .sort()
      .filter((nationality, i, arr) => arr.indexOf(nationality) === i);
    },
},

請注意,正如@JamesWhiteley 在評論中所說,默認情況下,不帶任何參數的sort()將按字母順序對字符串進行排序,我們不需要自定義排序 function。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM