javascript – 在元素数组中查找重复的元素系列
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 在元素数组中查找重复的元素系列,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2782字,纯文字阅读大概需要4分钟。
内容图文
![javascript – 在元素数组中查找重复的元素系列](/upload/InfoBanner/zyjiaocheng/793/272832e7b80d4b5bad3a3a77f1b6b54c.jpg)
我有这样的数组
var randomArray = [1,2,1,1,1,1,0,2,1,2,3,10,12,54,10,12] etc..
我可以删除重复的元素或在此查找重复的元素.但我想记录在数组中重复的所有重复元素序列.这是我尝试过的代码,但它运行到无限循环中
for (i = 0; i < randomLength; i++) {
var cycle = [i],
flag = 0,
start = i;
for (var j = i + 1; j < randomLength; j++) {
if (randomArray[i] == randomArray[j]) {
cycle.push(randomArray[j]);
while (i <= j) {
if (randomArray[i + 1] == randomArray[j + 1]) {
cycle.push(randomArray[j + 1]);
}
i = i + 1;
j = j + 1;
}
console.log(cycle);
}
i = start;
}
i = start;
}
它应该归还我.而且我不想正则表达式做同样的事情
1,2
1,1
10,12
If array is ["a","d","z","e","g","h","a","d","z"]
然后
output would be "a","d","z"
它应该是最佳解决方案.请建议我这个.至少更正我当前的代码..
解决方法:
Here is my solution,就像@robert国王一样(正如我自己解决问题后发现的那样),除了我的完成(已经能够不计算重叠模式)和优化(尽我所能).
此外,返回一个对象的地图,因此你可以枚举它,只能拉出大小为X的图形,或重复Y次的图形等.
以下行(具有以下功能)
getPatterns([1,2,1,1,1,1,0,2,1,2,3,10,12,54,10,12]).showRepeated();
会导致这个;
1 2 found 2 times
2 1 found 2 times
1 1 found 2 times
10 12 found 2 times
码
function getPatterns(input, generateAll) {
var patternMap = new getPatterns.presentation();
var generated = [];
var patternObj;
var start;
//for each item
for (var index = 0; index < input.length; ++index) {
//open a new slot for a new pattern start at this index
generated.push('');
start = 0;
//unless told to generate all
//skip patterns that cant possibly be repeated
//(i.e. longer than half the input length)
if (!generateAll && generated.length > input.length / 2)
start = generated.length - Math.floor(input.length / 2);
//test patterns we have generated for this index
for (var index2 = start; index2 < generated.length; ++index2) {
//generate a fresh lot of patterns for this index
generated[index2] += ' ' + input[index];
//unless told to generate all, dismiss patterns of length 1
if (!generateAll && index2 == generated.length - 1)
break;
//try to fetch a pre-existing pattern, O(1)
patternObj = patternMap[generated[index2]];
//if this is a new pattern
if (!patternObj) {
//generate an object
patternMap[generated[index2]] = {
lastSeen : index,
count : 1,
size : generated.length - index2
};
continue;
}
//unless told to generate all, skip patterns that overlap with themselves
if (!generateAll && index - patternObj.lastSeen < patternObj.size)
continue;
//this pattern has repeated! update the object data
++patternObj.count;
patternObj.lastSeen = index;
}
}
return patternMap;
}
//just for a function prototype
getPatterns.presentation = function() {};
getPatterns.presentation.prototype = {
showRepeated : function() {
var patternObj;
for (var pattern in this) {
patternObj = this[pattern];
if (patternObj.count > 1)
console.log(pattern + '\tfound ' + patternObj.count + ' times');
}
}
};
内容总结
以上是互联网集市为您收集整理的javascript – 在元素数组中查找重复的元素系列全部内容,希望文章能够帮你解决javascript – 在元素数组中查找重复的元素系列所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。