2016-04-16 2 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 пар

Любая помощь будет оценена.

Thanks

+1

Просто проверьте 'ли str.charAt (х)' пространство и пропустите его. – 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 поиска представляет собой О (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 проверить, если символ является пробельным

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] : ''; 
}