Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何通过任何字符串项来分组和收集字符串类型数组项';前3个字符是什么?_Javascript_Arrays_Algorithm_Grouping_Reduce - Fatal编程技术网

Javascript 如何通过任何字符串项来分组和收集字符串类型数组项';前3个字符是什么?

Javascript 如何通过任何字符串项来分组和收集字符串类型数组项';前3个字符是什么?,javascript,arrays,algorithm,grouping,reduce,Javascript,Arrays,Algorithm,Grouping,Reduce,提供了一个单词数组,其中一些单词最有可能有其前3个共同字符(考虑不区分大小写)。。。与此单词列表示例类似 ['Bob', 'Bobby', 'Robert', 'Robby'] 由于'Bob'和'Bobby'以及'Robert'和'Robby'确实有共同点'Bob'分别'Rob',因此我正在寻找一种方法,该方法将返回两个分组单词数组的数组,在前一个示例中是 [['Bob', 'Bobby'], ['Robert', 'Robby']] 这种方法是什么样的?将名称收集到一个以键开头的对象中(请

提供了一个单词数组,其中一些单词最有可能有其前3个共同字符(考虑不区分大小写)。。。与此单词列表示例类似

['Bob', 'Bobby', 'Robert', 'Robby']
由于
'Bob'
'Bobby'
以及
'Robert'
'Robby'
确实有共同点
'Bob'
分别
'Rob'
,因此我正在寻找一种方法,该方法将返回两个分组单词数组的数组,在前一个示例中是

[['Bob', 'Bobby'], ['Robert', 'Robby']]

这种方法是什么样的?

将名称收集到一个以键开头的对象中(请参见),然后获取该对象的值(请参见)

函数getArraysByNameFirstThreeChars(名称){
//声明用于收集类似开头名称的对象
const resultObject={};
//反复浏览这些名称
for(名称的常量名称){
//获取名称的前3个字符
const strStart=name.substring(0,name.length>=3?3:name.length);
//如果对象中已有成员
//对于此开头,请将名称推送到它
if(resultObject[strStart]){
结果对象[strStart].push(名称);
}否则{
//否则,请在集合对象中创建成员
//对于此名称开头,包含一个数组
//其中只有当前名称
结果对象[strStart]=[name];
}
}
返回Object.values(resultObject);
}
常量名称=['Bob'、'Bobby'、'Robert'、'Robby'];
const whatYouWant=getArraysByNameFirstThreeChars(名称);
console.log(whatYouWant)
.as控制台包装{min height:100%!important;top:0;}
as经常被证明是瑞士军刀

单个可配置的减速器功能即可完成此任务。另外一个要提供的开始值,收集器对象,具有
对象,该对象稍后保存所有收集和分组的单词列表。还可以配置
length
属性。它表示任何单词的开始序列的字符数,所有单词都将根据该序列进行分组和收集。忽略此属性在内部默认为数值
3

reducer专门收集独特的单词。因此,将过滤待处理数组中的重复项

对于预期为单词数组的最终结果,只需将返回值的
键传递给
对象。值

//添加了澄清。
//在本例中,他们共享前3个字母,bob和rob。
功能组和CollectWordsBysimilarStartSequences(收集器,word){
const{groups,length=3}=collector;
const index=collector.index | |(collector.index={});
//仅处理最小长度的非重复字。
if((word.length>=长度)和&!(索引中的单词)){
const groupKey=word.slice(0,长度).toLowerCase();
const groupList=groups[groupKey]| |(groups[groupKey]=[]);
groupList.push(word);
索引[字]=字;
}
回程收集器;
}
console.log(
'分组索引:',
['Bob','Bobby','Robert','Robby','Bob','Robby'](
groupAndCollectWordsBySimilarStartSequences{
组:{},
长度:2,
}
).团体
);
console.log(
'数组的数组:',
Object.values(['Bob','Bobby','Robert','Robby'])。reduce(
groupAndCollectWordsBySimilarStartSequences{
组:{},
长度:2,
}
)(三组)
);
console.log('\n');
console.log(
'分组索引:',
['Bob','Bobby','Robert','Robby','Bob','Robby'](
groupAndCollectWordsBySimilarStartSequences{
组:{},
}
).团体
);
console.log(
'数组的数组:',
Object.values(['Bob','Bobby','Robert','Robby'])。reduce(
groupAndCollectWordsBySimilarStartSequences{
组:{},
}
)(三组)
);
console.log('\n');
console.log(
'分组索引:',
['Bob','Bobby','Robert','Robby','Bob','Robby'](
groupAndCollectWordsBySimilarStartSequences{
组:{},
长度:4,
}
).团体
);
console.log(
'数组的数组:',
Object.values(['Bob','Bobby','Robert','Robby'])。reduce(
groupAndCollectWordsBySimilarStartSequences{
组:{},
长度:4,
}
)(三组)
);
console.log('\n')

作为控制台包装{min height:100%!important;top:0;}
什么是“相似的开始”?一封信?两封信?他们有一半以上的信件是相同的?补充说明。在这种情况下,他们分享前3封信,鲍勃和罗伯。谢谢你帮助我!我现在就试试这个。好的。首先我要再次感谢你。这段代码缺少一件事。在
子字符串中
应为
(0,3)
,以便从第一个字母开始,到第三个字母结束。刚刚
(3)
匹配,但它把博比和罗比拉到了同一组,并使其他两人成为了自己的孤儿。很酷的是,我能弄明白。我在学习!呜呼!在这个例子中,它起了作用。如果我有一个对象数组,并且我使用对象中的一个值来执行此操作,该怎么办?让我们说它:
[{name:'Bob'},{name:'Bobby'},{name:'Robert'},{name:'Robby'}]
子字符串(0,3)
语法是正确的,我已经编辑了答案。关于您关于对象的问题-它将完全相同,但不是
name.substring(0,3)它将是name.name.substring(0,3);`。您还可以将循环变量重命名为比本例中的“name”更合适的名称:)P.S.:请接受我对问题所做的编辑,那里的语法不正确,对吗now@KevinHandy ... 上述方法无法识别/处理重复单词和短于3个字符的单词的情况。“在某个时候,一个人也很可能会遇到区分大小写的问题。”彼得塞利格没有关于汉德林的请求