From 1fc2a0e04b30f43f704db5820086a741a7e0433d Mon Sep 17 00:00:00 2001 From: fisker Cheung Date: Thu, 25 Sep 2025 19:59:16 +0800 Subject: [PATCH] Replace `Array#reduce()` (#17970) --- .vscode/settings.example.json | 4 ++-- website/src/pages/index.jsx | 40 ++++++++++++++++++++++++----------- 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/.vscode/settings.example.json b/.vscode/settings.example.json index dd2c51bf1..1bcf4e9e2 100644 --- a/.vscode/settings.example.json +++ b/.vscode/settings.example.json @@ -1,9 +1,9 @@ { - "[javascript][typescript][json][jsonc][markdown][yaml]": { + "[javascript][typescript][javascriptreact][typescriptreact][json][jsonc][markdown][yaml]": { "editor.defaultFormatter": "esbenp.prettier-vscode", "editor.formatOnSave": true, }, - "[javascript][typescript]": { + "[javascript][typescript][javascriptreact][typescriptreact]": { "editor.codeActionsOnSave": { "source.fixAll.eslint": "explicit", }, diff --git a/website/src/pages/index.jsx b/website/src/pages/index.jsx index a012c257c..c526d6a49 100644 --- a/website/src/pages/index.jsx +++ b/website/src/pages/index.jsx @@ -135,34 +135,50 @@ function TldrSection() { ); } +/** +@typedef {{ + name: string, + nameLink?: string, + image: string, + variants: string[], +}} Language +*/ + function LanguagesSection() { const { siteConfig } = useDocusaurusContext(); + + /** @type {Language[]} */ const languages = siteConfig.customFields.supportedLanguages; - const languageChunks = languages.reduce((acc, language) => { - const last = acc.at(-1); + // Each chunk can have <=2 languages, <=9 variants + /** @type {{variantsCount: number, languages: Language[]}[]} */ + const languageChunks = []; + for (const language of languages) { + const languageVariants = language.variants.length; + const last = languageChunks.at(-1); if ( last && - last.length < 2 && - last.reduce((sum, lang) => sum + lang.variants.length, 0) + - language.variants.length < - 9 + last.languages.length < 2 && + last.variantsCount + languageVariants < 9 ) { - last.push(language); + last.variantsCount += languageVariants; + last.languages.push(language); } else { - acc.push([language]); + languageChunks.push({ + variantsCount: languageVariants, + languages: [language], + }); } - return acc; - }, []); + } return (
Works with the Tools You Use
- {languageChunks.map((languageChunk, index) => ( + {languageChunks.map(({ languages }, index) => (
- {languageChunk.map((language) => ( + {languages.map((language) => ( ))}