2016-04-16 23 views
1

如何提取字符串中包含所有空格的字符串中的唯一字母?從字符串中提取唯一字符並保留字符串之間的空格

我的代碼的問題是,它只返回的空間中第一次出現:

function unique_char(str1) { 
    var str = str1; 
    var uniql = ""; 
    for (var x = 0; x < str.length; x++) { 

    if (uniql.indexOf(str.charAt(x)) == -1) { 
     uniql += str[x]; 

    } 
    } 
    return uniql; 
} 
console.log(unique_char("the fox news newspaper")); 

此打印到控制檯:

的foxnwspar

但我期望的輸出是:

狐狸NWS面值

任何幫助將不勝感激。

謝謝

+1

只是檢查是否'str.charAt(X)'是一個空間並跳過它。 – Barmar

+0

它不起作用..在這種情況下,所有的空格將從字符串中刪除.. – Mercury121

+0

檢查是否爲空白,並添加它,而不是先執行'indexOf()'檢查。 – Barmar

回答

0

爲什麼不只是刪除空間?

function unique_char(str1) { 
 
    var str = str1.replace(/\s+/g, '');; 
 
    var uniql = ""; 
 
    for (var x = 0; x < str.length; x++) { 
 

 
    if (uniql.indexOf(str.charAt(x)) == -1) { 
 
     uniql += str[x]; 
 

 
    } 
 
    } 
 
    return uniql; 
 
} 
 
alert(unique_char("the fox news newspaper"));

0

我會去使用hashsets作爲他們的查找是O(1),代替N作爲indexOf()是。 JavaScript有一個很好的對象叫做Set。或者,您可以使用對象,因爲它們的按鍵本質上是唯一的。

對於真正的問題,就跳過這是一個空間(等於' '

function unique_char(str1) { 
    var result = {}; 
    for (var i = 0; i < str1.length; i++) { 
    if (str1[i] != ' ') result[str1[i]] = 1; 
    } 
    return Object.keys(result).join(""); 
} 

console.log(unique_char("the fox news newspaper")); 
+0

這真棒,但我想這個問題想要在輸出 –

0

可以初始化uniql用空格字符,並在年底

function unique_char(str1) { 
    var str = str1; 
    var uniql = " "; 
    for (var x = 0; x < str.length; x++) { 

    if (uniql.indexOf(str.charAt(x)) == -1) { 
    uniql += str[x]; 

    } 
} 
return uniql[1:]; 
} 
console.log(unique_char("the fox news newspaper")); 
刪除字符串中的字符
2

添加邏輯OR檢查,如果char是空白

if (uniql.indexOf(char) == -1 || char == ' ') 

請參見下面的工作片段:

function unique_char(str) { 
 
    var uniql = ""; 
 
    for (var x = 0; x < str.length; x++) { 
 
     var char = str.charAt(x); 
 
     if (uniql.indexOf(char) == -1 || char == ' ') { 
 
      uniql += str[x]; 
 
     } 
 
    } 
 
    return uniql; 
 
} 
 
document.write(unique_char("the fox news newspaper"));

+1

中保留空格,這似乎是對我來說最有效的答案,因爲只有一個函數調用是對'str.charAt(x)'進行的,並且只有一次使用'uniql + = str [x]' –

1

如果你想保留空白,首先檢查,看它是否是' ',否則再檢查,如果它是獨一無二的。

function unique_char(str1) { 
 
    var str = str1; 
 
    var uniql = ""; 
 
    for (var x = 0; x < str.length; x++) { 
 

 
    if (str.charAt(x) === ' '){ 
 
     uniql += str[x]; 
 
    } 
 
    else if (uniql.indexOf(str.charAt(x)) == -1) { 
 
     uniql += str[x]; 
 
    } 
 
    } 
 
    return uniql; 
 
} 
 
console.log(unique_char("the fox news newspaper"));

此打印到控制檯:

狐狸NWS面值

+0

謝謝@Jeff Puckett II ..你救了我。 – Mercury121

0
if (uniql.indexOf(str.charAt(x)) == -1) { 
    uniql += (str[x] !== ' ') ? str[x] : ''; 
}