javascript - 从 react 应用程序的下拉列表中选择选项时按字母顺序对对象数组进行排序

标签 javascript reactjs

我正在尝试根据标题和导演进行排序,但只有下拉列表中的第二个选项始终有效。下面是我的代码。仅选择第二个选项(可能是 asc 或 desc)时,将执行排序

class App extends Component {
  constructor() {
    super();
    this.state = {
      movies: data.movies, sort_term: '',
    };
    this.onSorting = this.onSorting.bind(this);
  }
  onSorting(e) {
    let term = 'Title';
    let option = e.target.value;
    let sortedList = [...this.state.movies].sort((a, b) => {
  return (option == 'asc' ? (a[term] <= b[term] ? -1 : 1) :
    (a[term] >= b[term] ? -1 : 1))
});
    this.setState({ sort_term: term });
    this.setState({ movies: sortedList });
  }

  render() {
    return (
      <div>
        <Hello sort_term={this.state.sort_term}
          onSorting={this.onSorting} />
        <br />
        <Table movies={this.state.movies} />
      </div>
    );
  }
} 

Hello.js

class Hello extends Component {
  render() {
    const { sort_term, onSorting } = this.props;
    return (
      <div className="header">
        Database
        <ul className="navLeft">
          <li >
            <form >
              <select value={sort_term}
                onChange={onSorting}
                className="searchBar">
                <option value="desc">Sort Title(Z - A)</option>
                <option value="asc">Sort Title(A - Z)</option>
              </select>
            </form>
          </li>
        </ul>
      </div>
    );
  }
}

最佳答案

我建议您像这样定义“OnSorting”函数

class App extends Component {
    constructor() {
        super();
        this.state = {
            movies: data.movies,
            sort_term: '',
        };
    }

    onSorting = (e) => {
        let term = 'Title';
        let option = e.target.value;
        let sortedList = [...this.state.movies].sort((a, b) => {
        return (option == 'asc_Title' ? (a[term] >= b[term] ? -1 : 1) :
            (a[term] <= b[term] ? -1 : 1))
        });
        this.setState({ sort_term: term });
        this.setState({ movies: sortedList });
    }

    render() {
        return (
        <div>
            <Hello sort_term={this.state.sort_term}
            onSorting={this.onSorting} />
            <br />
            <Table movies={this.state.movies} />
        </div>
        );
    }
} 

//Hello.js

class Hello extends Component {
    render() {
        const { sort_term, onSorting } = this.props;
        return (
            <div className="header">
            Database
            <ul className="navLeft">
                <li >
                <form >
                    <select
                    onChange={onSorting}
                    className="searchBar">
                    <option value="desc">Sort Title(Z - A)</option>
                    <option value="asc">Sort Title(A - Z)</option>
                    </select>
                </form>
                </li>
            </ul>
            </div>
        );
    }
}

关于javascript - 从 react 应用程序的下拉列表中选择选项时按字母顺序对对象数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52050058/

相关文章:

c# - 我的 C# 正则表达式存在问题,适用于 javascript

javascript - 如何在 Firestore 文档中保存对 Firebase Auth 用户的引用?

node.js - AWS后端+React前端: handling request

javascript - 防止 HTML 5 `video` 在 src 更改时闪烁海报图像

javascript - quilljs 空格/缩进没有被保留

Javascript 滚动条,到底部

javascript - React router v4 主动 anchor 链接

reactjs - 页面刷新后 React useReducer Hook 状态丢失

javascript - React — 使用样式化组件传递 props

javascript - 当 2 个对象匹配 if 语句时如何只获取第一个对象