簡體   English   中英

如何按字母順序對下拉菜單項排序?

[英]How can I sort drop-down menu items alphabetically?

Material-UI的下拉菜單中,是否可以按字母順序顯示options

我知道可以使用arr.sort()對數組進行排序。 但是,如果我執行const options = [...].sort() ,那么我仍然會在下拉菜單中看到未排序的值。

const options = [
  {label:"B",value:8033.86},
  {label:"A",value:483.93},
  {label:"Z",value:1246.3},
  {label:"C",value:145.0},
  {label:"E",value:244.5}
]

<Grid item xs={true}>
  <FormControl
      className={this.props.styles.formControl}
      margin="normal">
      <InputLabel shrink htmlFor="distanceTarget-label-placeholder">
          Target:
      </InputLabel>
      <Select
        onChange={(event) => this.props.handleChange("distanceTarget", event)}
        value={this.props.state.distanceTarget}
        input={<Input name="distanceTarget" id="distanceTarget-label-placeholder" />}
        displayEmpty="true"
        name="distanceTarget"
      >
      {options && options.length && options.map((option, i) => {
          return <MenuItem value={option.value} key={i}>{option.label}</MenuItem>
      })}
      </Select>
  </FormControl>
</Grid>

這是對對象數組進行排序的一種簡單方法,您可以閱讀文檔

 const options = [ {label:"B",value:8033.86}, {label:"A",value:483.93}, {label:"Z",value:1246.3}, {label:"C",value:145.0}, {label:"E",value:244.5} ] console.log(options.sort((a, b) => (a.label > b.label) ? 1 : -1)) 

Material-UI與樣式有關,而不是邏輯。 首先,您需要對選項進行排序。

    for (const item in options) {
     console.log(options[item].label)
    }

它的第一步。 第二,你應該嘗試一下。

在處理對象數組時,您需要告訴確定哪個決定首先出現:

function sortAlphabeticallyAscending(a,b){
    if(a.label < b.label) return -1;
    else if (a.label > b.label) return 1;
    else return 0;
}

options.sort(sortAlphabeticallyAscending);

基本上,如果要說a的索引小於b(即a排在前),則返回-1;如果要說b排在第一位,則返回1;如果不想更改順序,則返回0。

請參閱文檔中的compareFunction部分...

您必須定義排序邏輯,因為您的輸入數組是對象數組。

更多信息可以在這里找到

 const options = [ {label:"B",value:8033.86}, {label:"A",value:483.93}, {label:"Z",value:1246.3}, {label:"C",value:145.0}, {label:"E",value:244.5} ]; const objComparator = function(a, b) { if (a.label < b.label) { return -1; } if (a.label > b.label) { return 1; } return 0; }; options.sort(objComparator); 

暫無
暫無

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

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