14

文字列内の重複した文字をすべて削除する関数を JavaScript で作成する必要があります。これまでのところ、これを行うことができました。「アナコンダ」という単語がある場合、「タラ」を表示する必要があるときに、「アナコンダ」という結果として表示されます。これが私のコードです:

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

29 に答える 29

11

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

console.log(find_unique_characters('baraban'));
console.log(find_unique_characters('anaconda'));

文字列内で 1 回出現する文字のみを返したい場合は、最後に出現した文字が最初に出現した位置と同じ位置にあるかどうかを確認します。

コードは、文字列内のすべての文字を少なくとも 1 回返すのではなく、複数回出現する文字のみを返していました。しかし、明らかにあなたはすでにそれを知っています。そうでなければ、質問はありません;-)

于 2012-12-12T13:52:46.537 に答える
4

楽しみのために私のソリューションを追加したかっただけです:

function removeDoubles(string) {
  var mapping = {};
  var newString = '';

  for (var i = 0; i < string.length; i++) {
    if (!(string[i] in mapping)) {
      newString += string[i];
      mapping[string[i]] = true;
    }
  }
  return newString;
}
于 2016-08-23T15:47:04.527 に答える
3

lodashの場合:

_.uniq('baraban').join(''); // returns 'barn'
于 2016-11-14T15:00:11.463 に答える
2
  //One simple way to remove redundecy of Char in String
       var char = "aaavsvvssff"; //Input string
       var rst=char.charAt(0);
       for(var i=1;i<char.length;i++){              
           var isExist = rst.search(char.charAt(i));
            isExist >=0 ?0:(rst +=  char.charAt(i) ); 
       }
       console.log(JSON.stringify(rst)); //output string : avsf
于 2016-09-29T03:40:24.977 に答える
1

デモ

function find_unique_characters( string ){
    unique=[];
    while(string.length>0){
        var char = string.charAt(0);
        var re = new RegExp(char,"g");
        if (string.match(re).length===1) unique.push(char);
        string=string.replace(re,"");
    }        
    return unique.join("");
}
console.log(find_unique_characters('baraban')); // rn
console.log(find_unique_characters('anaconda')); //cod
​
于 2012-12-12T14:50:51.933 に答える
1
var str = 'anaconda'.split('');
var rmDup = str.filter(function(val, i, str){
     return str.lastIndexOf(val) === str.indexOf(val);
});
console.log(rmDup); //prints ["c", "o", "d"]

ここで確認してください: https://jsfiddle.net/jmgy8eg9/1/

于 2017-09-28T07:01:34.177 に答える
0

複数回出現するすべての文字を削除するさらに別の方法:

function find_unique_characters( string ) {
    var mapping = {};
    for(var i = 0; i < string.length; i++) {
        var letter = string[i].toString();
        mapping[letter] = mapping[letter] + 1 || 1;
    }
    var unique = '';
    for (var letter in mapping) {
        if (mapping[letter] === 1)
            unique += letter;
    }

    return unique;
}

ライブ テスト ケース

説明: 文字列内のすべての文字を 1 回ループし、各文字を文字列内で発生した回数にマッピングします。次に、項目 (文字列に出現した文字) を繰り返し処理し、一度だけ出現したものだけを選択します。

于 2012-12-12T14:00:16.230 に答える
0
function removeDup(str) {
  var arOut = [];
  for (var i=0; i < str.length; i++) {
    var c = str.charAt(i);
    if (c === '_') continue;
    if (str.indexOf(c, i+1) === -1) {
      arOut.push(c);
    }
    else {
      var rx = new RegExp(c, "g");
      str = str.replace(rx, '_');
    }
  }
  return arOut.join('');
}
于 2012-12-12T14:02:32.197 に答える
0

これが機能するFF / Chromeがあります:

var h={}; 
"anaconda".split("").
  map(function(c){h[c] |= 0; h[c]++; return c}).
  filter(function(c){return h[c] == 1}).
  join("")

次のような関数を書くと、これを再利用できます。

function nonRepeaters(s) {
  var h={}; 
  return s.split("").
    map(function(c){h[c] |= 0; h[c]++; return c}).
    filter(function(c){return h[c] == 1}).
    join("");
 }

などを欠いている古いブラウザの場合mapfilterjQueryまたはプロトタイプでエミュレートできると思います...

于 2012-12-12T13:58:30.477 に答える
0
console.log(("anaconda").split('').sort().join('').replace(/(.)\1+/g, ""));

これにより、1行で実行できます。

出力: 'cdo'

于 2019-11-06T10:03:20.883 に答える
0

方法 1 : JS 関数を含めるだけの簡単な方法

var data = 'sssssddddddddddfffffff';

    var ary = [];
    var item = '';
    for (const index in data) {
      if (!ary.includes(data[index])) {
        ary[index] = data[index];
        item += data[index];
      }
    }
    console.log(item);

方法 2:はい、JavaScript 関数を使用せずにこれを可能にします。

var name = 'sssssddddddddddfffffff';

let i = 0;
let newarry = [];

for (let singlestr of name) {
    newarry[i] = singlestr;
    i++;
}


// now we have new Array and length of string
length = i;

function getLocation(recArray, item, arrayLength) {

    firstLaction = -1;
    for (let i = 0; i < arrayLength; i++) {

        if (recArray[i] === item) {
            firstLaction = i;
            break;
        }

    }

    return firstLaction;

}


let finalString = '';
for (let b = 0; b < length; b++) {
   
    const result = getLocation(newarry, newarry[b], length);
    if (result === b) {
        finalString += newarry[b];
    }

}
console.log(finalString); // sdf
于 2019-12-10T10:38:46.920 に答える
0

このコードは、文字列から重複した(繰り返される)文字を削除するのに役立ちました(その単語がスペースで区切られていても)

リンク:作業サンプル JSFiddle

/* This assumes you have trim the string and checked if it empty */
function RemoveDuplicateChars(str) {
   var curr_index = 0;
   var curr_char;
   var strSplit;
   var found_first;
   while (curr_char != '') {
      curr_char = str.charAt(curr_index);
      /* Ignore spaces */
      if (curr_char == ' ') {
         curr_index++;
         continue;
      }
      strSplit = str.split('');
      found_first = false;
      for (var i=0;i<strSplit.length;i++) {
         if(str.charAt(i) == curr_char && !found_first) 
            found_first = true;
         else if (str.charAt(i) == curr_char && found_first) {
            /* Remove it from the string */
            str = setCharAt(str,i,'');
         }
      }
      curr_index++;
   }
   return str;
}
function setCharAt(str,index,chr) {
    if(index > str.length-1) return str;
    return str.substr(0,index) + chr + str.substr(index+1);
}
于 2013-06-21T15:34:15.440 に答える