Tengo una cadena con caracteres repetidos como: 'CANADA' .
Y estoy tratando de obtener la cadena que eliminó solo uno de los caracteres repetidos:
'CNADA', 'CANDA', 'CANAD' .
Lo probé con subString, pero devolvió la parte de la cadena eliminada. También lo probé con reduce, pero terminó eliminando todos los caracteres repetidos ('CND').
¿Cuál es la forma de eliminar solo un carácter a la vez? Los resultados se pueden almacenar en una matriz. (resultados = ['CNADA', 'CANDA', 'CANAD'])
Gracias.
Puede lograr esto utilizando el segundo parámetro de String#indexOf() que especifica la posición desde la cual iniciar la búsqueda. Aquí en un ciclo while , y usando un Set para eliminar los duplicados antes de regresar.
function getReplaceOptions(str, char) { let res = [], i = str.indexOf(char, 0); while (i !== -1) { res.push(str.substring(0, i) + str.substring(++i)); i = str.indexOf(char, i) } return Array.from(new Set(res)) } console.log(getReplaceOptions('CANADA', 'A')); console.log(getReplaceOptions('Mississippi', 's'));Primero puede contar todas las ocurrencias en la cadena. Más tarde, puede iterar sobre el script y, si el recuento es mayor que 1, puede eliminar ese carácter.
const theString = 'CANADA' const letterCount = {} const resultArr = [] for (var i = 0; i < theString.length; i++) { const theLetter = theString.charAt(i) if(letterCount[theLetter]){ letterCount[theLetter] = letterCount[theLetter] + 1 } else{ letterCount[theLetter] = 1 } } console.log(letterCount) for (var i = 0; i < theString.length; i++) { const theLetter = theString.charAt(i) if(letterCount[theLetter] && letterCount[theLetter] > 1){ resultArr.push(theString.substr(0, i) + theString.substr(i + 1)) } } console.log(resultArr)Podría usar un poco de magia de Array para eliminar caracteres duplicados:
function removeDuplicateCharacters(value) { // convert string to array and loop through each character return String(value).split('').filter(function(char, index, all) { // return false if char found at a different index return (index === all.indexOf(char)); }) .join(''); // convert back to a string } // returns `CAND` removeDuplicateCharacters('CANADA'); // returns `helo wrd` removeDuplicateCharacters('hello world');