He estado tratando de resolver este desafío (que se encuentra en jschallenger.com):
Esta es mi solución hasta ahora (que estaba seguro de que funcionaría):
function insertEveryThree(a, b) { let arr = a.split('') for (let i = arr.length - 3; i > 0; i -= 3) { arr.splice(i, 0, b) } return arr.join('') } console.log(insertEveryThree('actionable', '-')) // a-cti-ona-ble console.log(insertEveryThree('1234567', '.')) // 1.234.567 console.log(insertEveryThree('abcde', '$')) // ab$cde console.log(insertEveryThree('zxyzxyzxyzxyzxyz', 'w')) // zwxyzwxyzwxyzwxyzwxyz¿Dónde estoy fallando?
Puede reemplazar la cadena con una expresión regular.
function insertEveryThree(a, b) { return a.replace(/(?=(...)+$)/g, b); } console.log(insertEveryThree('actionable', '-')) // a-cti-ona-ble console.log(insertEveryThree('1234567', '.')) // 1.234.567 console.log(insertEveryThree('abcde', '$')) // ab$cde console.log(insertEveryThree('zxyzxyzxyzxyzxyz', 'w')) // zwxyzwxyzwxyzwxyzwxyzDebe ingresar a una nueva matriz, el empalme muta la matriz y causa problemas con los índices:
function insertEveryThree(str, character, index = 3) { const strArr = str.split(""); const newArr = []; for (const i = 0; i < str.length; i++) { newArr.push(strArr[i]); if ((i + 1) % index === 0 && i !== 0 && i + 1 < str.length) { newArr.push(character); } } return newArr.join(""); } console.log(insertEveryThree("actionable", "-")); // act-ion-abl-e console.log(insertEveryThree("1234567", ".")); // 123.456.7 console.log(insertEveryThree("abcde", "$")); // abc$de console.log(insertEveryThree("zxyzxyzxyzxyzxyz", "w")); // zxywzxywzxywzxywzxywz