Javascript 查找单词在数组中相邻出现的时间

Javascript 查找单词在数组中相邻出现的时间,javascript,arrays,sorting,Javascript,Arrays,Sorting,我有一个巨大的字符串(单词)数组,我正在分析它们的模式 我想创建一个函数来: 确定单词以特定顺序出现在一起的次数超过一次 对于单词按顺序出现的每个实例,将它们组合成单个数组元素 例子 给定以下数组 let array = ["john", "smith", "says", "that", "a", "lock", "smith", "can", "open", "the", "lock", "unlike", "john", "smith"] 预期结果: ["john smith", "s

我有一个巨大的字符串(单词)数组,我正在分析它们的模式

我想创建一个函数来:

  • 确定单词以特定顺序出现在一起的次数超过一次
  • 对于单词按顺序出现的每个实例,将它们组合成单个数组元素
例子 给定以下数组

let array = ["john", "smith", "says", "that", "a", "lock", "smith", "can", "open", "the", "lock", "unlike", "john", "smith"]
预期结果:

["john smith", "says", "that", "a", "lock", "smith", "can", "open", "the", "lock", "unlike", "john smith"]
理想情况下,该函数识别的不仅仅是两个单词的组合(即,识别“white”、“house”、“press”、“secretary”组合出现多次的时间)

我真的很难用逻辑来展示很多东西。我也一直在寻找一个解决方案,比如underline.js,但运气不好。

构建一个“字典”然后循环遍历原始数组,并检查每个元素的所有字典返回是否匹配,如果匹配,则合并这些单词并跳过直接的后继者

var arr=[“约翰”、“史密斯”、“说”、“那”、“一个”、“锁”、“史密斯”、“罐头”、“打开”、“锁”、“不像”、“约翰”、“史密斯”];
函数组合公用(arr){
var字典={};
对于(变量a=0;a1){
if(字典[元素]
.一些(功能(a){
返回一个!=字典[element][0];
})==假){
通过=正确;
}
}
如果(通过){
res.push(arr[索引]+“”+字典[元素][0]);
索引++;
}否则{
res.push(arr[索引]);
}
}
返回res;
}
console.log(combineCommon(arr));
请检查此项

var数据=
[“约翰”、“史密斯”、“说”、“那个”、“a”、“锁”、“史密斯”、“罐头”、“打开”、“锁”、“不像”、“约翰”、“史密斯”]
var结果=[];
var标志=0;
var n=数据长度;
var k=0;
//外主回路。

对于(var i=0;i您可以计算成对数,并在重新组合结果时检查成对数

var数组=[“约翰”、“史密斯”、“说”、“那”、“a”、“锁”、“福”、“巴”、“巴”、“史密斯”、“罐头”、“开”、“福”、“巴”、“巴”、“巴”、“巴”、“那”、“锁”、“不像”、“约翰”、“史密斯”],
count=Object.create(空),
结果;
forEach(函数(a,i,aa){
var key=aa.slice(i,i+2).join(“”);
计数[键]=(计数[键]| 0)+1;
});
结果=数组.reduce(函数(r,a,i,aa){
var key=aa.slice(i,i+2).join(“”);
如果(计数[键]>1){
a=键;
}else if(计数[aa.切片(i-1,i+1).连接(“”)]>1){
a=[];
}
返回r.concat(a);
}, []);
console.log(结果);

。作为控制台包装{max height:100%!important;top:0;}
您是否正在寻找有关“多字表达式标识”的逻辑?如果是这样的话,有很多资源,但它们并不是那么简单,除非您希望它非常简单。感谢您的回复,这是有意义的,并且在JSFIDLE中运行时可以完美地工作。但是,我在将其合并到我的项目中时遇到了困难。是否有什么原因使上述功能不能在es6项目中工作?具体来说,我很抱歉当遇到if(dictionary[element].length>1)时,我得到“TypeError:无法读取未定义的属性'length'”{…@wrobbinz当未定义的索引是单词数组的一部分时会发生这种情况。最简单的解决方法是在循环之前使用
array.Filter
。我已经将我在个人项目中实现此功能的问题归结为一个关于stackoverflow的新问题。