在不使用常用方法的情况下重新排序JS中的字符串

时间:2018-07-26 21:13:28

标签: javascript string function char

感谢您的阅读。我目前正在编写一个作业,其中我要负责执行功能,同时拥有该作业的“禁止”方法列表。有问题的函数从用户处获取一个字符串,然后在该字符串中获取一个字符,并根据从用户获取的最终值将其向右或向左移动。

即字符串=单词,字符= W,值= +2(右)。最终产品= orWd

显然,被禁止的方法是最有用的方法,因为赋值旨在教您如何使用循环,数组和函数来实现这些方法的目的。

我已经开始寻找并选择要移动的字符,但是一直想弄清楚如何在字符串中移动该字符。我曾考虑过将整个字符串重建为一个新字符串,但这似乎效率不高。

var x=prompt("Please enter a word.");
var y=prompt("Please enter a character to select.");
var z=prompt("Please enter a value to move the selected character by " + " (Negative values move left, positive values move right.)");

function questionOne(stringInput,charInput,numInput) {
    var stringLength= stringInput.length;
    for(i=0;i<stringLength;i++){
        var stringChar=stringInput.charAt(i);
        if (stringChar === charInput){
            var newWord;
            for (count=0;count<stringLength;count++){
                
            }
        }
    }

编辑:“禁止”方法的完整列表。

字符串内置函数

endsWith()

includes()

indexOf()

lastIndexOf()

localeCompare()

match()

repeat()

replace()

search()

slice()

split()

startsWith()

substr()

substring()

toLocaleLowerCase()

toLocaleUpperCase()

toLowerCase()

toString()

toUpperCase()

trim()

trimLeft()

trimRight()

valueOf()

数组内置函数

concat()

copyWithin()

每个()

fill()

filter()

find()

findIndex()

forEach()

indexOf()

isArray()

join()

lastIndexOf()

map()

pop()

push()

reduce()

reduceRight()

reverse()

shift()

slice()

some()

sort()

splice()

toString()

unshift()

valueOf()

我一直在寻找一个高低的解决方案,但一直找不到。感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

只是一个想法,没有给出部分问题的答案,而是将具有正值的字符移到右侧。

例如,使用更长的单词,然后选择'wording'和字符'r'2,以将字母向右移动两个位置。

  0   1   2   3   4   5   6   indices
          v                   position of character before reordering
  w   o  |r   d   i|  n   g   original word
  w   o  |d   i   r|  n   g   result
                  ^           position of character after reordering
  0   0   1   1   0   0   0   offset

您可以看到的是

  • 如果找不到字符'r',请在索引处加上字母,

  • 如果找到字符'r',则使用偏移量1和实际索引来获取字母,

  • 如果索引等于交换字符加移动值的位置,则取保存位置的字符'r'并将索引的偏移量设置为零,

    < / li>
  • 进行到字符串结尾。

答案 1 :(得分:0)

逐个输入字母

主要目的是填充字母数组,因此以后将很容易处理它。

为此,您需要从输入字段而不是提示中读取输入,因此可以将事件监听器附加到输入字段以读取并存储单击的字母。

这是实现该目标的代码段:

let word = []; // word array

let input = document.querySelector('#txt');

input.addEventListener( "keyup", function(e){
  word[word.length] = e.key;
});
<input id="txt" value="" type="text">

组成单词的功能

您需要创建一个读取参数并编写结果字的函数 而且由于数组方法被禁止使用,为什么不创建自定义函数来帮助我们实现目标。

这是实现该目标的代码段(包括第一个代码段):

let wArr = []; // word array

let input = document.querySelector('#txt');
let submit = document.querySelector('#submit');

// read input from user letter by letter and save it to wArr
input.addEventListener( "keyup", function(e){
  wArr[wArr.length] = e.key;
});

// submit
submit.addEventListener( "click",  composeWord);

function composeWord(){
  
  // read params
  var c = document.querySelector("#letter").value;
  var d = document.querySelector("#direction").value;
  var n = parseInt(document.querySelector("#number").value);
  
  // loop through each char
  for( var i=0; i < wArr.length; i++ ){
    
    // target char encountered ?
    if( wArr[i] === c ){
      
      // select the char to switch with
      // we use conditional statements here
      var e = d === "right" ? i + n + 1 : i - n ;
      
      // perform a permutation
      // use a simple permutation logic
      wArr = shiftArr( wArr, i, e, wArr[i] );
      
      break;
    }
  }
  // compose the word
  let w = "";
  for( let i=0; i< wArr.length; i++){
    w+= wArr[i];
  }
  
  alert(w);
}

// custom function to shift an array
function shiftArr( arr, i1, i2, val ){
  
  let a = [];
  
  let j = 0;
  
  for( var i=0; i< arr.length; i++ ){
    
    
    if( i === i1 )
      continue;
    
    else if( i === i2 ){
      a[j] = arr[i1];
      j++;
    }
      
      a[j] = arr[i];
      j++;
  }
  
  return a;
}
<input id="txt" value="" type="text" placeholder="Type the desired word">
<input type="text" value=""  id="letter" placeholder="Enter the letter to shift">
<input type="text" value=""  id="direction" placeholder=" 'right' or 'left'" >
<input type="text" value=""  id="number" placeholder='Number of positions to shift'>

<button id='submit'>Submit</button>

END

这是一个有效的天真代码,我的天真意思是用户必须始终输入正确的数据,原因是该代码不检查错误也不捕获错误。