【问题标题】:Beginning at the end of 'a', insert 'b' after every 3rd character of 'a'从“a”的末尾开始,在“a”的每个第三个字符后插入“b”
【发布时间】:2022-07-14 23:16:06
【问题描述】:

我一直在努力解决这个挑战(在 jschallenger.com 上找到):

  1. 编写一个以两个字符串(a 和 b)作为参数的函数
  2. 从“a”的末尾开始,在每个第 3 个字符后插入“b” '一个'
  3. 返回结果字符串

这是我目前的解决方案(我确信它会起作用):

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

我在哪里失败了?

【问题讨论】:

  • 因为 arr.length 每次在循环中插入内容时都会发生变化
  • 究竟是什么问题?预期的输出是什么?

标签: javascript


【解决方案1】:

你可以用正则表达式替换字符串。

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')) // zwxyzwxyzwxyzwxyzwxyz

【讨论】:

  • 我也支持正则表达式解决方案,但我无法弄清楚问题到底出在哪里。它看起来像问题描述的那样,但它与 OP 的输出相同。
【解决方案2】:

你需要推入一个新数组,拼接会改变数组并导致索引出现问题:

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

【讨论】:

    【解决方案3】:
    function myFunction(a, b) {
       let result = [];
       let rest = a;
       while (rest.length) {
        result.push(rest.slice(-3));
        rest = rest.slice(0, -3);
       }
       return result.reverse().join(b);
    }
    

    【讨论】:

      猜你喜欢
      • 2016-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-11
      • 1970-01-01
      • 2022-07-06
      • 2022-11-29
      相关资源
      最近更新 更多