我有一个重复字母的字符串。我希望不止一次重复的字母只显示一次。例如,我有一个字符串aaabbbccc我希望结果是abc。到目前为止,我的功能是这样的:
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
在第一个内部。
答案 0 :(得分:17)
首先将其转换为数组,然后使用答案here,并重新加入,如下所示:
var nonUnique = "ababdefegg";
var unique = nonUnique.split('').filter(function(item, i, ar){ return ar.indexOf(item) === i; }).join('');
全部在一行: - )
答案 1 :(得分:10)
使用字符填充Set
并连接其唯一条目:
function makeUnique(str) {
return String.prototype.concat(...new Set(str))
}
console.log(makeUnique('abc')); // "abc"
console.log(makeUnique('abcabc')); // "abc"
答案 2 :(得分:1)
您可以将regular expression与custom replacement function:
一起使用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;
});
}
答案 3 :(得分:1)
可能为时已晚,但仍然是我对这篇文章的回答:
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("");
}
答案 4 :(得分:0)
根据实际问题:&#34;如果信件没有重复,则不显示&#34;
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));
答案 5 :(得分:0)
您的问题是,每次在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'))
在此我们只会将string
中找到的字符添加到unique
,如果它已经存在的话。这根本不是一种有效的方法......但根据你的要求它应该有效。
我无法运行此功能,因为我没有任何方便运行JavaScript ...但此方法中的理论应该可行。
答案 6 :(得分:0)
使用lodash:
_.uniq('aaabbbccc').join(''); // gives 'abc'
答案 7 :(得分:0)
如果必须重复显示一次重复字符,请尝试此操作,即 对于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"
如果只需显示唯一字符(String Bombarding Algo),请添加另一个&#34;和&#34;条件删除多次出现的字符并仅显示唯一字符,即 对于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"
答案 8 :(得分:0)
{{1}}
答案 9 :(得分:0)
这是最简单的功能
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;
}
答案 10 :(得分:0)
const countUnique = (s1, s2) => new Set(s1 + s2).size
基于@le_m答案的更短方法