首页 新闻 会员 周边

js 判断一个字符串中是否存在两个及以上相同元素的最优算法

0
悬赏园豆:30 [已解决问题] 解决于 2012-12-15 10:59

如题,字符串形如:a,b,c,d,e,f,....   字符串长度未知。但有一个规律就是,元素之间以“,”分隔。现要在js中判断传入的这个字符串中的元素是否有相同的。如 a,b,a,c (有两个a元素)   、  a,b,c,d,c (有两个c元素)。

问题补充:

字符串形如:  name,age,address,test,ss,ggg,....

icyme的主页 icyme | 初学一级 | 园豆:77
提问于:2012-12-12 16:11
< >
分享
最佳答案
0

字串长度不固定,元素是单字母还是字符串?

收获园豆:5
Rich.T | 老鸟四级 |园豆:3440 | 2012-12-12 16:33

var result = check("an,b,c,d,an,f", 'an');
alert(result);
function check(str, s) {
    var start = str.indexOf(s);
    var n = str.indexOf(s, start + 1);
    if (n > 0) {
        return true;
    }
    return false;
}

Rich.T | 园豆:3440 (老鸟四级) | 2012-12-12 16:51

@Rich.T: 

为避免把111和11认为也相同,最好在调用方法前把两个值前后都加上逗号

check(",an,b,c,d,an,f,", ',an,');

Rich.T | 园豆:3440 (老鸟四级) | 2012-12-12 16:56

@Rich.T: 兄弟,可能是我表述的不够明白。是这样的。

js中判断给出的一个字符串中是否有相同元素的算法。如:var str='name,age,add,sex,llo,ddt,'; 其中元素之间以逗号分隔。像以上字符串,就没有相同元素。 var str='name,age,name,sex';这种就有一个相同元素name。  我想在只需要写一个js方法,传入要判断的这个字符串,方法运算后,如果传入的这个字符串中,有相同元素就返回某个值,没有相同元素也返回一个值就行了。

不需要传入要查找具体的那个值,如朋友上面方法的'an'元素。

icyme | 园豆:77 (初学一级) | 2012-12-13 09:25

var array = get("an,b,c,d,an,f");
alert(array);
function get(str) {
    var array = new Array();
    var list = str.split(",");
    for (var i = 0; i < list.length; i++) {
        var s = list[i];
        if (array.indexOf(s) == -1) {
            if (check(str, s)) {
                array.push(array.length, list[i]);
            }
        }
    }
    return array;
}
function check(str, s) {
    var start = str.indexOf(s);
    var n = str.indexOf(s, start + 1);
    if (n > 0) {
        return true;
    }
    return false;
}

Rich.T | 园豆:3440 (老鸟四级) | 2012-12-13 09:37

@Rich.T: 兄弟,结贴的时候看错了,下次一定多给点分。

icyme | 园豆:77 (初学一级) | 2012-12-15 11:00
其他回答(4)
1

遍历一边,然后用类似hash,一样的,记录一下就知道了

收获园豆:5
chenping2008 | 园豆:9836 (大侠五级) | 2012-12-12 17:35
0

如楼上所说,代码如下:

function check(str){
var a = str.split(','),dt={},tmp,i=0,l=a.length;
for(; i < l ; i++){
   tmp = a[i];
   if(tmp.length>0){
     if(dt[tmp]){
          return true;//true代表有重复的
     }else{
        dt[tmp]=1;
    }
   }
}
return true;//true代表没有重复的
}
check('sdfsdf,aaa,3sdf,w234,aaa');

 

 

收获园豆:10
js明哥哥 | 园豆:243 (菜鸟二级) | 2012-12-13 11:57
0

checkString("aa,bb,cc,dd");
function checkString(str){
var arrStr=str.split(",");
var hash = {};
for(var i=0;i<arrStr.length-1;i++){
if(!hash[arrStr[i]])
{
hash[arrStr[i]]=true;
}
else{
alert("有重复的。");
}
}
alert("没有重复的!");
}

收获园豆:10
少年学编程 | 园豆:3 (初学一级) | 2012-12-14 11:50
0

使用正则表达式进行匹配,性能绝对高!

沉默不语 | 园豆:209 (菜鸟二级) | 2012-12-14 19:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册