10

我有一个带有重复字母的字符串。我希望多次重复的字母只显示一次。例如,我有一个字符串aaabbbccc,我希望结果为abc. 到目前为止,我的功能是这样的:

  • 如果字母不重复,则不显示
  • 如果重复一次,则只显示一次(即 aa 显示 a)
  • 如果重复两次,则显示全部(即 aaa 显示 aaa)
  • 如果重复 3 次,则显示 6(如果 aaaa,则显示 aaaaaa)
function unique_char(string) {
    var unique = '';
    var count = 0;
    for (var i = 0; i < string.length; i++) {
        for (var j = i+1; j < string.length; j++) {
            if (string[i] == string[j]) {
                count++;
                unique += string[i];
            }
        }
    }
    return unique;
}

document.write(unique_char('aaabbbccc'));

该函数必须在循环内带有循环;这就是为什么第二个for在第一个里面。

4

15 回答 15

30

用字符填充 aSet并连接其唯一条目:

function makeUnique(str) {
  return String.prototype.concat(...new Set(str))
}

console.log(makeUnique('abc'));    // "abc"
console.log(makeUnique('abcabc')); // "abc"

于 2016-06-20T21:51:14.143 回答
24

首先将其转换为数组,然后在此处使用答案,然后重新加入,如下所示:

var nonUnique = "ababdefegg";
var unique = nonUnique.split('').filter(function(item, i, ar){ return ar.indexOf(item) === i; }).join('');

一站式服务:-)

于 2015-03-01T20:09:35.120 回答
3

可能为时已晚,但我对这篇文章的回答仍然是我的版本:

function extractUniqCharacters(str){
    var temp = {};
    for(var oindex=0;oindex<str.length;oindex++){
        temp[str.charAt(oindex)] = 0; //Assign any value
    }
    return Object.keys(temp).join("");
}
于 2018-07-27T12:38:54.840 回答
2

您可以将正则表达式自定义替换函数一起使用:

function unique_char(string) {
    return string.replace(/(.)\1*/g, function(sequence, char) {
         if (sequence.length == 1) // if the letter doesn't repeat
             return ""; // its not shown
         if (sequence.length == 2) // if its repeated once
             return char; // its show only once (if aa shows a)
         if (sequence.length == 3) // if its repeated twice
             return sequence; // shows all(if aaa shows aaa)
         if (sequence.length == 4) // if its repeated 3 times
             return Array(7).join(char); // it shows 6( if aaaa shows aaaaaa)
         // else ???
         return sequence;
    });
}
于 2012-12-13T22:20:57.963 回答
2

使用lodash

_.uniq('aaabbbccc').join(''); // gives 'abc'
于 2016-11-14T15:07:30.670 回答
1

根据实际问题:“如果字母不重复,则未显示”

function unique_char(str)
{
    var obj = new Object();

    for (var i = 0; i < str.length; i++)
    {
        var chr = str[i];
        if (chr in obj)
        {
            obj[chr] += 1;
        }
        else
        {
            obj[chr] = 1;
        }
    }

    var multiples = [];
    for (key in obj)
    {
        // Remove this test if you just want unique chars
        // But still keep the multiples.push(key)
        if (obj[key] > 1)
        {
            multiples.push(key);
        }
    }

    return multiples.join("");
}

var str = "aaabbbccc";
document.write(unique_char(str));
于 2012-12-13T20:52:12.573 回答
1

您的问题是unique每次在string. 真的,您可能应该这样做(因为您指定答案必须是嵌套的 for 循环):

function unique_char(string){

    var str_length=string.length;
    var unique='';

    for(var i=0; i<str_length; i++){

        var foundIt = false;
        for(var j=0; j<unique.length; j++){

            if(string[i]==unique[j]){

                foundIt = true;
                break;
            }

        }

        if(!foundIt){
            unique+=string[i];
        }

    }

   return unique;
}

document.write( unique_char('aaabbbccc'))

在这里,我们只添加找到的字符stringunique如果它不存在的话。这根本不是一种有效的方法......但根据您的要求,它应该可以工作。

我无法运行它,因为我没有任何方便的东西可以在其中运行 JavaScript……但是这种方法中的理论应该有效。

于 2012-12-13T20:59:04.957 回答
1

这是最简单的功能

  function remove(text) 
    {
      var unique= "";
      for(var i = 0; i < text.length; i++)
      {
        if(unique.indexOf(text.charAt(i)) < 0) 
        {
          unique += text.charAt(i);
        }
      }
      return unique;
    }
于 2017-07-01T00:01:20.447 回答
1

如果重复字符必须显示一次,请尝试此操作,即对于 i/p:aaabbbccc o/p:abc

var str="aaabbbccc";
Array.prototype.map.call(str, 
  (obj,i)=>{
    if(str.indexOf(obj,i+1)==-1 ){
     return obj;
    }
  }
).join("");
//output: "abc"

如果只需要显示唯一字符(字符串轰炸算法),请尝试此操作,添加另一个“and”条件以删除多次出现的字符并仅显示唯一字符,即对于 i/p: aabbbkaha o/p: kh

var str="aabbbkaha";
Array.prototype.map.call(str, 
 (obj,i)=>{
   if(str.indexOf(obj,i+1)==-1 && str.lastIndexOf(obj,i-1)==-1){ // another and condition
     return obj;
   }
 }
).join("");
//output: "kh"
于 2017-06-17T21:08:31.967 回答
1

<script>
    uniqueString = "";

    alert("Displays the number of a specific character in user entered string and then finds the number of unique characters:");

    function countChar(testString, lookFor) {
        var charCounter = 0;
        document.write("Looking at this string:<br>");

        for (pos = 0; pos < testString.length; pos++) {
            if (testString.charAt(pos) == lookFor) {
                charCounter += 1;
                document.write("<B>" + lookFor + "</B>");
            } else
                document.write(testString.charAt(pos));
        }
        document.write("<br><br>");
        return charCounter;
    }

    function findNumberOfUniqueChar(testString) {
        var numChar = 0,
            uniqueChar = 0;
        for (pos = 0; pos < testString.length; pos++) {
            var newLookFor = "";
            for (pos2 = 0; pos2 <= pos; pos2++) {
                if (testString.charAt(pos) == testString.charAt(pos2)) {
                    numChar += 1;
                }
            }
            if (numChar == 1) {
                uniqueChar += 1;
                uniqueString = uniqueString + " " + testString.charAt(pos)
            }
            numChar = 0;
        }
        return uniqueChar;
    }

    var testString = prompt("Give me a string of characters to check", "");
    var lookFor = "startvalue";
    while (lookFor.length > 1) {
        if (lookFor != "startvalue")
            alert("Please select only one character");
        lookFor = prompt(testString + "\n\nWhat should character should I look for?", "");
    }
    document.write("I found " + countChar(testString, lookFor) + " of the<b> " + lookFor + "</B> character");
    document.write("<br><br>I counted the following " + findNumberOfUniqueChar(testString) + " unique character(s):");
    document.write("<br>" + uniqueString)
</script>

于 2017-06-23T17:37:19.990 回答
0
const countUnique = (s1, s2) => new Set(s1 + s2).size

基于@le_m 答案的更短方式

于 2020-10-20T15:01:40.200 回答
0

如果要在数组中返回值,可以使用下面的函数。

    const getUniqueChar=(str)=>str.split('').filter((item, index, arr)=> 
    arr.slice(index+1).indexOf(item)===-1);

    console.log(getUniqueChar("aaabbbccc"));

或者

您可以使用 Set 构造函数

    cosnt getUniqueChar=(str)=>
    new Set(str.split(''));
    console.log(getUniqueChar('aaabbbccc'));
于 2021-10-07T07:19:52.197 回答
0

一种解决方案是使用 Set。const chars = [...new Set(s.split(''))];

于 2020-01-07T00:09:04.427 回答
0

这是执行该 pt 的最简单的功能。2

const showUniqChars = (text) => {
  let uniqChars = "";

  for (const char of text) {
    if (!uniqChars.includes(char))
      uniqChars += char;
  }
  return uniqChars;
};
于 2020-01-20T14:47:57.070 回答
0
let unique=myArray.filter((item,index,array)=>array.indexOf(item)===index)
于 2021-10-30T05:02:13.603 回答