【问题标题】:JS Split VarablesJS 拆分变量
【发布时间】:2019-07-09 19:49:08
【问题描述】:

我有一个像“iyxnhel2jeh”这样的字符串,我想为每 2 个字节将它们拆分为一个 var。

var string = "iyxnhel2jehe";
var final = "";

while (/*String still has bits*/) {
    switch (/*Two byte of string*/) {
        case "iy":
            final += "x";
        break;
        case "xn":
            final += "o";
        break;
        case "he":
            final += "g";
        break;
        case "l2":
            final += "k";
        break;
        case "je":
            final += "e";
        break;
        default:
            final += "none"
    }
}

剪断这个字符串的最好方法是什么?

【问题讨论】:

  • 给定字符的字节数取决于编码...你的意思是你只想每两个字符分割一个字符串?
  • 你的意思是bytes,还是真的是characters
  • 这可以通过带有 indexOf 和 else 而不是循环的 if 语句来完成

标签: javascript string while-loop switch-statement


【解决方案1】:

您可以使用正则表达式将字符串拆分为 2 个字母部分,将它们映射到 switch 语句中的字符并将数组重新连接在一起,但是最佳方法是摆脱 switch 语句,而是使用这些序列字符作为对象的键。

var string = "iyxnhel2jehe";
var final = string.match(/.{1,2}/g).map(twoletters => {
    return {
        "iy": "x",
        "xn": "o",
        "he": "g",
        "l2": "k",
        "je": "e"
    }[twoletters] || "none";
}).join("");
console.log(final)

【讨论】:

    【解决方案2】:

    var string = "iyxnhel2jehe";
    var final = "";
    var offset = 0;
    while (offset < string.length) {
    	switch (string.slice(offset, offset + 2)) {
    		case "iy":
    			final += "x";
    			break;
    		case "xn":
    			final += "o";
    			break;
    		case "he":
    			final += "g";
    			break;
    		case "l2":
    			final += "k";
    			break;
    		case "je":
    			final += "e";
    			break;
    		default:
    			final += "none"
    	}
    	offset += 2;
    }
    console.log(final);

    【讨论】:

      【解决方案3】:

      我不确定最好的方法,但以下方法可以满足您的需求...

      var string = "iyxnhel2jehe";
      var final = "";
      
      for (var i = 0; i < string.length; i+=2) {
        switch (string.substr(i,2)) {
              case "iy":
                  final += "x";
              break;
              case "xn":
                  final += "o";
              break;
              case "he":
                  final += "g";
              break;
              case "l2":
                  final += "k";
              break;
              case "je":
                  final += "e";
              break;
              default:
                  final += "none"
         }
      }
      console.log(final);

      【讨论】:

        【解决方案4】:

        与其尝试消耗字符并检查是否还有剩余,不如先尝试将字符串分成2个字符的块,然后循环遍历数组:

        const s = "iyxnhel2jehe";
        let final = "";
        
        const t = s.split('');
        const segments = t.map((e, i) => i % 2 === 0 ?
                                         e + (t.length - 1 >= i + 1 ? t[i + 1] : '') :
                                         null)
                          .filter(x => x != null);
        
        segments.forEach(sg => {
            console.log(sg);
            switch (sg) {
                case "iy":
                    final += "x";
                break;
                case "xn":
                    final += "o";
                break;
                case "he":
                    final += "g";
                break;
                case "l2":
                    final += "k";
                break;
                case "je":
                    final += "e";
                break;
                default:
                    final += "none"
            }
        });
        
        console.log(final);

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-03
          • 1970-01-01
          • 2014-02-14
          • 2015-08-29
          相关资源
          最近更新 更多