主頁 > 移動端開發 > 我正在嘗試根據所選日期的其他選擇過濾選擇組件

我正在嘗試根據所選日期的其他選擇過濾選擇組件

2022-03-22 20:43:52 移動端開發

我希望根據用戶選擇的年份顯示玩家。例如,如果我在第 2 次選擇的第 1 次選擇中選擇 2011 年,則僅顯示 2011 年出生的球員。我為每年創建了一個 if 陳述句并檢查他是否出生在當年的 1 月 1 日到 12 月 31 日之間,但我不要認為這樣做效率太高(100 個 if 陳述句)。我正在使用 React js

代碼如下

import React, { useState, useEffect } from 'react';
import './style.css';

export default function App() {
  const vitet = [
    2030, 2029, 2028, 2027, 2026, 2025, 2024, 2023, 2022, 2021, 2020, 2019,
    2018, 2017, 2016, 2015, 2014, 2013, 2012, 2011, 2010, 2009, 2008, 2007,
    2006, 2005, 2004, 2003, 2002, 2001, 2000, 1999, 1998, 1997, 1996, 1995,
    1994, 1993, 1992, 1991, 1990, 1989, 1988, 1987, 1986, 1985, 1984, 1983,
    1982, 1981, 1980, 1979, 1978, 1977, 1976, 1975, 1974, 1973, 1972, 1971,
    1970, 1969, 1968, 1967, 1966, 1965, 1964, 1963, 1962, 1961, 1960, 1959,
    1958, 1957, 1956, 1955, 1954, 1953, 1952, 1951, 1950, 1949, 1948, 1947,
    1946, 1945, 1944, 1943, 1942, 1941, 1940, 1939, 1938, 1937, 1936, 1935,
    1934, 1933, 1932, 1931, 1930, 1929, 1928, 1927, 1926, 1925, 1924, 1923,
    1922, 1921, 1920, 1919, 1918, 1917, 1916, 1915, 1914, 1913, 1912, 1911,
  ];

  const [year, setyear] = useState('');
  const [option, setOption] = useState([]);
  const [players, setPlayers] = useState([
    { playerName: 'ANn', playerId: '1', birthday: '2010-01-02' },
    { playerName: 'Eli', playerId: '2', birthday: '2011-01-02' },
    { playerName: 'Benn', playerId: '3', birthday: '2012-01-02' },
    { playerName: 'Klo', playerId: '4', birthday: '2013-01-02' },
    { playerName: 'Jhon', playerId: '5', birthday: '2014-01-02' },
    { playerName: 'Billy', playerId: '6', birthday: '2015-01-02' },
    { playerName: 'Dani', playerId: '7', birthday: '2015-01-02' },
    { playerName: 'Molly', playerId: '8', birthday: '2016-01-02' },
    { playerName: 'emily', playerId: '9', birthday: '2000-01-02' },
  ]);
  let secondOptions = players;

  if (year === '2010') {
    secondOptions = players.filter(
      (players) =>
        players.birthday >= '2010-01-01' && players.birthday <= '2010-12-31'
    );
  } else if (year === '2011') {
    secondOptions = players.filter(
      (players) =>
        players.birthday >= '2011-01-01' && players.birthday <= '2011-12-31'
    );
  } else if (year === '2012') {
    secondOptions = players.filter(
      (players) =>
        players.birthday >= '2012-01-01' && players.birthday <= '2012-12-31'
    );
  } else if (year === '2013') {
    secondOptions = players.filter(
      (players) =>
        players.birthday >= '2013-01-01' && players.birthday <= '2013-12-31'
    );
  } else if (year === '2014') {
    secondOptions = players.filter(
      (players) =>
        players.birthday >= '2014-01-01' && players.birthday <= '2014-12-31'
    );
  } else if (year === '2015') {
    secondOptions = players.filter(
      (players) =>
        players.birthday >= '2015-01-01' && players.birthday <= '2015-12-31'
    );
  } else if (year === '2016') {
    secondOptions = players.filter(
      (players) =>
        players.birthday >= '2016-01-01' && players.birthday <= '2016-12-31'
    );
  } else if (year === '2017') {
    secondOptions = players.filter(
      (players) =>
        players.birthday >= '2017-01-01' && players.birthday <= '2017-12-31'
    );
  } else if (year === '2018') {
    secondOptions = players.filter(
      (players) =>
        players.birthday >= '2018-01-01' && players.birthday <= '2018-12-31'
    );
  } else if (year === '2019') {
    secondOptions = players.filter(
      (players) =>
        players.birthday >= '2019-01-01' && players.birthday <= '2019-12-31'
    );
  } else if (year === '2000') {
    secondOptions = players.filter(
      (players) =>
        players.birthday >= '2000-01-01' && players.birthday <= '2000-12-31'
    );
  } else {
    secondOptions = [];
  }

  useEffect(() => {
    // Update the document title using the browser API
    console.log('playerat per ke optioni', secondOptions);
  });
  return (
    <div>
      <h1>Hello StackBlitz!</h1>
      <p>Start editing to see some magic happen :)</p>
      <select name="" id="" onChange={(e) => setyear(e.target.value)}>
        {/* <option value="2010">2010</option>
        <option value="2011">2011</option>
        <option value="2012">2012</option>
        <option value="2013">2013</option>
        <option value="2014">2014</option>
        <option value="2015">2015</option>
        <option value="2016">2016</option>
        <option value="2017">2017</option>
        <option value="2018">2018</option>
        <option value="2019">2019</option> */}
        {vitet.map((item) => (
          <option value={item}>{item}</option>
        ))}
      </select>
      <select>
        {secondOptions.map((item) => (
          <option key={item.playerId}>{item.playerName}</option>
        ))}
      </select>
      <p> {year}</p>
    </div>
  );
}

看看你可以在這里看到的代碼編輯器。

https://stackblitz.com/edit/react-jruwh9

uj5u.com熱心網友回復:

是的,你應該擺脫所有的if條件。

你可以這樣做:

 secondOptions = players.filter(
      (player) =>{
        let split = player.birthday.split('-')
        return split[0] === year
      }
    );

uj5u.com熱心網友回復:

好吧,如果您真的想將日期視為字串(請查看答案末尾的注釋),您可以執行以下操作

import React, { useState } from 'react';
import './style.css';

const years = [
  2030, 2029, 2028, 2027, 2026, 2025, 2024, 2023, 2022, 2021, 2020, 2019,
  2018, 2017, 2016, 2015, 2014, 2013, 2012, 2011, 2010, 2009, 2008, 2007,
  2006, 2005, 2004, 2003, 2002, 2001, 2000, 1999, 1998, 1997, 1996, 1995,
  1994, 1993, 1992, 1991, 1990, 1989, 1988, 1987, 1986, 1985, 1984, 1983,
  1982, 1981, 1980, 1979, 1978, 1977, 1976, 1975, 1974, 1973, 1972, 1971,
  1970, 1969, 1968, 1967, 1966, 1965, 1964, 1963, 1962, 1961, 1960, 1959,
  1958, 1957, 1956, 1955, 1954, 1953, 1952, 1951, 1950, 1949, 1948, 1947,
  1946, 1945, 1944, 1943, 1942, 1941, 1940, 1939, 1938, 1937, 1936, 1935,
  1934, 1933, 1932, 1931, 1930, 1929, 1928, 1927, 1926, 1925, 1924, 1923,
  1922, 1921, 1920, 1919, 1918, 1917, 1916, 1915, 1914, 1913, 1912, 1911,
];

const players = [
  { playerName: 'ANn', playerId: '1', birthday: '2010-01-02' },
  { playerName: 'Eli', playerId: '2', birthday: '2011-01-02' },
  { playerName: 'Benn', playerId: '3', birthday: '2012-01-02' },
  { playerName: 'Klo', playerId: '4', birthday: '2013-01-02' },
  { playerName: 'Jhon', playerId: '5', birthday: '2014-01-02' },
  { playerName: 'Billy', playerId: '6', birthday: '2015-01-02' },
  { playerName: 'Dani', playerId: '7', birthday: '2015-01-02' },
  { playerName: 'Molly', playerId: '8', birthday: '2016-01-02' },
  { playerName: 'emily', playerId: '9', birthday: '2000-01-02' },
];

export default function App() {
  const [year, setYear] = useState('');

  const secondOptions = players.filter(player => player.birthday >= `${year}-01-01` && player.birthday <= `${year}-12-31`);

  return (
    <div>
      <h1>Hello StackBlitz!</h1>
      <p>Start editing to see some magic happen :)</p>
      <select onChange={(e) => setYear(e.target.value)}>
        {years.map((item) => (
          <option key={`year_option_${item}`} value={item}>{item}</option>
        ))}
      </select>
      <select>
        {secondOptions.map((item) => (
          <option key={`second_option_${item.playerId}`} value={item.playerId}>{item.playerName}</option>
        ))}
      </select>
      <p>{year}</p>
    </div>
  );
}

我將一些變數移出組件,因為就像現在一樣,它們不需要在組件中。此外,我添加了一些缺少的鍵并洗掉了未使用的變數,以供演示建議。

關于日期的重要說明

通常最好將日期視為Date字串而不是字串。

如果您決定處理您的日期廣告Date實體,那么您可以使用 JavaScript 中可用的函式,并執行與我在過濾器部分中發布的代碼中顯示的類似的操作。

uj5u.com熱心網友回復:

我將從優化您的年份選擇開始。使用開始年份,并填寫一個陣列直到現在。沒有人會出生在未來……然而;)

下一個過濾只有那些有球員的年份,下一個如果你設定年份,只需過濾當前年份的球員。

import React, { useState } from 'react';
import './style.css';

export default function App() {
  const START_YEAR = 1911;
  const END_YEAR = new Date().getFullYear()   1;

  const [year, setyear] = useState('');
  const [players, setPlayers] = useState([
    { playerName: 'ANn', playerId: '1', birthday: '2010-01-02' },
    { playerName: 'Eli', playerId: '2', birthday: '2011-01-02' },
    { playerName: 'Benn', playerId: '3', birthday: '2012-01-02' },
    { playerName: 'Klo', playerId: '4', birthday: '2013-01-02' },
    { playerName: 'Jhon', playerId: '5', birthday: '2014-01-02' },
    { playerName: 'Billy', playerId: '6', birthday: '2015-01-02' },
    { playerName: 'Dani', playerId: '7', birthday: '2015-01-02' },
    { playerName: 'Molly', playerId: '8', birthday: '2016-01-02' },
    { playerName: 'emily', playerId: '9', birthday: '2000-01-02' },
  ]);

  const vitet = new Array(END_YEAR - START_YEAR)
    .fill(START_YEAR)
    .map((current, i) => current   i)
    .filter(
      (year) =>
        players.find(
          (player) => player.birthday.substr(0, 4) === year.toString()
        ) !== undefined
    );

  return (
    <div>
      <h1>Hello StackBlitz!</h1>
      <p>Start editing to see some magic happen :)</p>
      <select name="" id="" onChange={(e) => setyear(e.target.value)}>
        {vitet.map((item) => (
          <option value={item}>{item}</option>
        ))}
      </select>
      <select>
        {players
          .filter((player) => player.birthday.substr(0, 4) === year.toString())
          .map((item) => (
            <option key={item.playerId}>{item.playerName}</option>
          ))}
      </select>
      <p> {year}</p>
    </div>
  );
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/446496.html

標籤:javascript 反应 日期 输入 筛选

上一篇:如果欄位僅包含一個“0”字符,則WooCommerce電話號碼欄位驗證不起作用

下一篇:如何從.t??xt檔案中讀取url并在htmlsrc中使用?

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【從零開始擼一個App】Dagger2

    Dagger2是一個IOC框架,一般用于Android平臺,第一次接觸的朋友,一定會被搞得暈頭轉向。它延續了Java平臺Spring框架代碼碎片化,注解滿天飛的傳統。嘗試將各處代碼片段串聯起來,理清思緒,真不是件容易的事。更不用說還有各版本細微的差別。 與Spring不同的是,Spring是通過反射 ......

    uj5u.com 2020-09-10 06:57:59 more
  • Flutter Weekly Issue 66

    新聞 Flutter 季度調研結果分享 教程 Flutter+FaaS一體化任務編排的思考與設計 詳解Dart中如何通過注解生成代碼 GitHub 用對了嗎?Flutter 團隊分享如何管理大型開源專案 插件 flutter-bubble-tab-indicator A Flutter librar ......

    uj5u.com 2020-09-10 06:58:52 more
  • Proguard 常用規則

    介紹 Proguard 入口,如何查看輸出,如何使用 keep 設定入口以及使用實體,如何配置壓縮,混淆,校驗等規則。

    ......

    uj5u.com 2020-09-10 06:59:00 more
  • Android 開發技術周報 Issue#292

    新聞 Android即將獲得類AirDrop功能:可向附近設備快速分享檔案 谷歌為安卓檔案管理應用引入可安全隱藏資料的Safe Folder功能 Android TV新主界面將顯示電影、電視節目和應用推薦內容 泄露的Android檔案暗示了傳說中的谷歌Pixel 5a與折疊屏新機 谷歌發布Andro ......

    uj5u.com 2020-09-10 07:00:37 more
  • AutoFitTextureView Error inflating class

    報錯: Binary XML file line #0: Binary XML file line #0: Error inflating class xxx.AutoFitTextureView 解決: <com.example.testy2.AutoFitTextureView android: ......

    uj5u.com 2020-09-10 07:00:41 more
  • 根據Uri,Cursor沒有獲取到對應的屬性

    Android: 背景:呼叫攝像頭,拍攝視頻,指定保存的地址,但是回傳的Cursor檔案,只有名稱和大小的屬性,沒有其他諸如時長,連ID屬性都沒有 使用 cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATIO ......

    uj5u.com 2020-09-10 07:00:44 more
  • Android連載29-持久化技術

    一、持久化技術 我們平時所使用的APP產生的資料,在記憶體中都是瞬時的,會隨著斷電、關機等丟失資料,因此android系統采用了持久化技術,用于存盤這些“瞬時”資料 持久化技術包括:檔案存盤、SharedPreference存盤以及資料庫存盤,還有更復雜的SD卡記憶體儲。 二、檔案存盤 最基本存盤方式, ......

    uj5u.com 2020-09-10 07:00:47 more
  • Android Camera2Video整合到自己專案里

    背景: Android專案里呼叫攝像頭拍攝視頻,原本使用的 MediaStore.ACTION_VIDEO_CAPTURE, 后來因專案需要,改成了camera2 1.Camera2Video 官方demo有點問題,下載后,不能直接整合到專案 問題1.多次拍攝視頻崩潰 問題2.雙擊record按鈕, ......

    uj5u.com 2020-09-10 07:00:50 more
  • Android 開發技術周報 Issue#293

    新聞 谷歌為Android TV開發者提供多種新功能 Android 11將自動填表功能整合到鍵盤輸入建議中 谷歌宣布Android Auto即將支持更多的導航和數字停車應用 谷歌Pixel 5只有XL版本 搭載驍龍765G且將比Pixel 4更便宜 [圖]Wear OS將迎來重磅更新:應用啟動時間 ......

    uj5u.com 2020-09-10 07:01:38 more
  • 海豚星空掃碼投屏 Android 接收端 SDK 集成 六步驟

    掃碼投屏,開放網路,獨占設備,不需要額外下載軟體,微信掃碼,發現設備。支持標準DLNA協議,支持倍速播放。視頻,音頻,圖片投屏。好點意思。還支持自定義基于 DLNA 擴展的操作動作。好像要收費,沒體驗。 這里簡單記錄一下集成程序。 一 跟目錄的build.gradle添加私有mevan倉庫 mave ......

    uj5u.com 2020-09-10 07:01:43 more
最新发布
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:40:31 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:40:11 more
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:39:36 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:39:13 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:16:23 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:16:15 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:15:46 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:14:53 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:14:08 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:08:34 more