Javascript将具有相同起始字符的数组中的单词分组

Javascript将具有相同起始字符的数组中的单词分组,javascript,arrays,grouping,Javascript,Arrays,Grouping,我目前正在学习javascript,在试图找出如何处理此问题时遇到了问题: 我有一系列像这样带有特殊问号的单词 wordsArray=[为什么,你愿意,为一个电话付费,] 我试图将具有相同起始字符的单词分组到同一个单独的数组组中 示例输出为: firstArray = ["why", "would"] //<- all start with w secondArray = ["you"] thirdArray = ["pay", "phone"]//<- all start with

我目前正在学习javascript,在试图找出如何处理此问题时遇到了问题:

我有一系列像这样带有特殊问号的单词

wordsArray=[为什么,你愿意,为一个电话付费,]

我试图将具有相同起始字符的单词分组到同一个单独的数组组中 示例输出为:

firstArray = ["why", "would"] //<- all start with w
secondArray = ["you"]
thirdArray = ["pay", "phone"]//<- all start with p
fourthArray = ["for"]
fifthArray = ["a"] 
finalArray = ["?"]//<- special character like ?, :,.. in the same group
我如何做到这一点? 我写错了,这个问题看起来像是在问代码,但实际上我在问一个解决方案,如何从逻辑上解决这个问题,你可以使用

const wordsArray=[为什么,你愿意,为一部电话付费?]; const binned=wordsArray.reduceresult,word=>{ //获取第一个字母。这假定列表中没有空单词 常量字母=单词[0]; //确保结果包含此信函的条目 结果[字母]=结果[字母]| |[]; //将单词添加到字母索引中 结果[字母].pushword; //返回更新的结果 返回结果; }, {} 控制台 你可以用

const wordsArray=[为什么,你愿意,为一部电话付费?]; const binned=wordsArray.reduceresult,word=>{ //获取第一个字母。这假定列表中没有空单词 常量字母=单词[0]; //确保结果包含此信函的条目 结果[字母]=结果[字母]| |[]; //将单词添加到字母索引中 结果[字母].pushword; //返回更新的结果 返回结果; }, {}
控制台 const wordsByLetter=arr.reducewordsByLetter,word=>{if Array.isArraywordsByLetter[word.charAt0]wordsByLetter[word.charAt0].pushword;else wordsByLetter[word.charAt0]=[word];返回wordsByLetter,{};
const arraysOfWords=Object.valueswarhbyletter;

const wordsByLetter=arr.reducewordsByLetter,word=>{if Array.isArraywordsByLetter[word.charAt0]wordsByLetter[word.charAt0]。pushword;else wordsByLetter[word.charAt0]=[word];返回wordsByLetter,{};
const arraysOfWords=Object.valueswowsbyletter;

对于ES6,与和类似:

让数据=[为什么,会,你,支付,为,电话,,]; 让结果=data.reducer,c=>{ r[c[0]]=r[c[0]]?[…r[c[0]],c]:[c] 返回r }, {}
console.logObject.valuesresult对于ES6,与和类似:

让数据=[为什么,会,你,支付,为,电话,,]; 让结果=data.reducer,c=>{ r[c[0]]=r[c[0]]?[…r[c[0]],c]:[c] 返回r }, {} console.logObject.valuesresult您可以使用reduce函数,但对于所有特殊字符,请使用单个数组。您可以使用具有默认键special的对象初始化累加器。在reduce回调函数中,检查此累加器是否具有一个键,该键是迭代中当前元素的第一个字母。如果是这种情况,则en按下键数组中的当前值

let wordsArray=[为什么,你愿意,为一部电话付费,,-]; 变量regex=/^[a-zA-Z0-9]*$/; 设grouped=wordsArray.reducefunctionacc,curr{ 设isSpecial=regex.testcurr; 如果!是特殊的{ 根据特殊的普什库尔 }否则,如果acc.hasOwnPropertycurr.charAt0{ acc[当前字符]。pushcurr }否则{ acc[当前字符]=[当前] } 返回acc; }, { 特别:[] } console.loggrouped您可以使用reduce函数,但对于所有特殊字符,都可以使用单个数组。您可以使用带有默认键special的对象初始化累加器。在reduce回调函数中,检查此累加器是否有一个键,该键是迭代中当前元素的第一个字母。如果是这种情况,请按密钥数组中的当前值

let wordsArray=[为什么,你愿意,为一部电话付费,,-]; 变量regex=/^[a-zA-Z0-9]*$/; 设grouped=wordsArray.reducefunctionacc,curr{ 设isSpecial=regex.testcurr; 如果!是特殊的{ 根据特殊的普什库尔 }否则,如果acc.hasOwnPropertycurr.charAt0{ acc[当前字符]。pushcurr }否则{ acc[当前字符]=[当前] } 返回acc; }, { 特别:[] } 控制台。日志分组使用reduce:

const-arr=[为什么,你愿意,为一部电话付费?]; 常数res=arr.reduceac[f,…l]=>{ acc[f]=acc[f]| |[]按f+l.连接; 返回acc; }, {}; console.logres; .作为控制台包装{最大高度:100%!重要;顶部:自动;}使用reduce:

const-arr=[为什么,你愿意,为一部电话付费?]; 常数res=arr.reduceac[f,…l]=>{ acc[f]=acc[f]| |[]按f+l.连接; 返回acc; }, {}; console.logres;
.作为控制台包装{最大高度:100%!重要;顶部:自动;}到目前为止,您尝试了什么?StackOverflow不是一个代码编写服务,您需要显示您尝试了什么,以便我们帮助您修复它。我尝试在forEach循环中使用indexOfstring,0来比较数组中的每个元素,但我不知道如何找到第一个字符并将其添加到infexOf函数的第一个参数请在中包含您对代码的尝试
下次你的问题。好的,我下次再问。谢谢你到目前为止做了什么?StackOverflow不是一个代码编写服务,你需要展示你尝试了什么,以便我们帮助你修复它。我尝试使用indexOfstring,在forEach循环中0以相互比较数组中的每个元素,但我不知道如何找到第一个字符并将其添加到infexOf函数的第一个参数中。请在下次的问题中包含您对代码的尝试。好的,我将在下一次的回答中执行此操作,因为它非常详细地解释了如何工作:。我现在还不知道reduce函数,谢谢:接受答案,因为它非常详细地解释了如何工作:。我现在还不知道reduce函数,谢谢:实际上,这是唯一需要考虑下一个问题的方法:特殊字符,如?,:,。。实际上,在同一组中,这是唯一需要考虑下一个因素的方法:特殊字符,如?,:,。。同组