首页 > 解决方案 > 为什么这个 switch 语句没有成功替换 String 的字符来解决这个 Javascript 算法?

问题描述

问题

将字符串中的字符 &、<、>、"(双引号)和 '(撇号)转换为其对应的 HTML 实体。

我的代码

function convertHTML(str) {
  
  let tempArr = ['a'];
  let newArr = [];
  let regex = /[&<>"']/


str.split('')
  .forEach((item)=>{
      switch(item){
    case '&': tempArr[0] = '&amp';
    break;
    case '<': tempArr[0] = '&lt';
    break;
    case '>': tempArr[0] = '&gt';
    break;
    case '"': tempArr[0] = '&quot';
    break;
    case "'": tempArr[0] = '&apos';
    break;
  }
    if(regex.test(item)==true){
      item.replace(item, tempArr[0])
    }
    newArr.push(item);
  })

    return newArr;


}

console.log(convertHTML("Dolce & Gabbana"));

根据我对代码的理解,这应该可行。所以我的理解肯定有问题。(我仍然必须加入阵列,但替换不起作用)。

标签: javascriptalgorithmswitch-statement

解决方案


这是什么都不做:

item.replace(item, tempArr[0])

replace不会改变它的任何论点。它返回一个您不使用的新字符串。

但由于item只是一个字符,您应该为它分配替换:

item = tempArr[0]

注意:我不知道你为什么将它tempArr用作数组,因为它除了 1 个元素之外没有其他任何东西,所以它也可以是一个字符串。

这是完成工作的更简单方法:

function convertHTML(str) {
  let entity = {
      "'": "&apos",
      "&": "&amp;",
      "<": "&lt;",
      ">": "&gt;",
      '"': "&quot",
  };
  return str.replace(/[&<>"']/g, item => entity[item]);
}

console.log(convertHTML("Dolce & Gabbana"));


推荐阅读