Javascript:确定字符串中的所有字符是否唯一,如果不是,则删除重复的字符

时间:2013-06-24 22:07:11

标签: javascript string unique

使用a[letter][occurences]设置数组,但在遍历此数组时遇到困难,检查occurences > 1并删除那些数组。

function charFreq(s) {
    var i, j;
    var a = new Array();

    for (j = 0; j < s.length; j++) {
        for (i = 0; i < a.length; i++) {
            if (a[i][0] == s[j]) {
                a[i][1]++;
                break;
            }
        }
        if (i == a.length) {
            a[i] = [s[j], 1];
        }
    }
    return a[i][0];
}
document.write(charFreq("insert string here"));

这是我到目前为止所提出的混乱:

function check(str) {
    var c;
    for (c=0; c < a.length; c++) {
        if(a[c][1] == 1) {
            return true;
            break;
        } else {
            return false;
        }
    }
}

7 个答案:

答案 0 :(得分:3)

使用ES6 Set:

&#13;
&#13;
// :: unique = Array<any>|string => Array<any>
const unique = xs => [...new Set(xs)]

const dedupe = str => unique(str).join('')

console.log(
  unique('foo'), // => ['f', 'o']
  dedupe('foo'), // => 'fo'
)
&#13;
&#13;
&#13;

答案 1 :(得分:1)

不要这样做。

function noDups( s ) {
  var chars = {}, rv = '';

  for (var i = 0; i < s.length; ++i) {
    if (!(s[i] in chars)) {
      chars[s[i]] = 1;
      rv += s[i];
    }
  }

  return rv;
}

alert(noDups("Shoe fly pie, and apple pan dowdy")); // Shoe flypi,andw

随着字符串长度变长,代码变慢的速度大约等于字符串长度的 square

答案 2 :(得分:0)

要删除字符串中的重复字符,可以使用下一个使用户@Cerbrus的函数

function find_unique_characters( string ){
    var unique='';
    for(var i=0; i<string.length; i++){
        if(string.lastIndexOf(string[i]) == string.indexOf(string[i])){
            unique += string[i];
        }
    }
    return unique;
}
console.log(find_unique_characters('baraban'));
  

如果您只想返回在a中出现一次的字符   string,检查它们的最后一次出现是否与...相同   他们第一次出现。

     

您的代码至少返回字符串中的所有字符一次,   而不只是返回不超过一次的字符

链接到stackoverflow Remove duplicate characters from string的线程

答案 3 :(得分:0)

这是一个快速的方法:

str = str.split('').filter(function(v,i,self){
  return self.indexOf(v) == i;
}).join('');

答案 4 :(得分:0)

function RemoveDuplicateLetters(input) {
    var result = '', i = 0, char = '';
    while (i < input.length) {
        char = input.substring(i, i+1);
        result += char;
        input = input.replace(char,'');
    }
    return result;
}

答案 5 :(得分:0)

我看不到 splice 版本,所以这里是一个:

function uniqueChars(s) {
  var s = s.split('');
  var c, chars = {}, i = 0;

  while ((c = s[i])) {
    c in chars? s.splice(i, 1) : chars[c] = ++i;
  }
  return s.join('');
}

答案 6 :(得分:0)

这假设只有字母字符,大写字母不等于小写字母。

function uniqueChars(string){
    var i= 0, L= string.length, ustring= '', next;
    while(i<L){
        next= string.charAt(i++);
        if(ustring.indexOf(next)== -1) ustring+= next;
    }
    return ustring.replace(/[^a-zA-Z]/g, '');
}
var s1= 'The quick red fox jumps over the lazy brown dog.';
uniqueChars(s1)

/ *返回值:(String) Thequickrdfoxjmpsvtlazybwng * /

返回任何唯一字符 -

function uniqueArray(array){
    return array.filter(function(itm, i, T){
        return T.indexOf(itm)== i;
    });
}
var s1= 'The quick red fox jumps over the lazy brown dog.';
uniqueArray(s1.split('')).join('');

/ *返回值:(String) quickrdfoxjmpsvtlazybwng。 * /