为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript:完全旋转字符串,然后在给定数字输入的另​​一个方向旋转字符串

JavaScript:完全旋转字符串,然后在给定数字输入的另​​一个方向旋转字符串

凤凰求蛊 2021-06-16 17:22:33
我有一个函数,它接受一个字符串并返回一个函数。返回的函数接受一个数字并返回一个字符串。返回的函数返回按给定数字旋转的原始字符串。我下面的代码有效。function rotater (str){  return function (num){    let strArr = str.split('');    //console.log(strArr)    for (let i=0; i<num; i++){      //console.log(num)      let element = strArr[0];      //console.log(element)      strArr.push(element);       strArr.shift()      //console.log(strArr)    }    return strArr.join('')  }}const rotate = rotater('abcde');rotate(4) // returns 'eabcd' as expected我的问题是下一个测试规范。一旦弦完全旋转,它将随后向另一个方向旋转。以下是测试规范:it('once told to rotate fully will afterwards rotate in the other direction', () => {    const rotate = rotater('helloWORLD');    expect(rotate(1)).toEqual('elloWORLDh'); // same as before    expect(rotate(2)).toEqual('lloWORLDhe'); // same as before    rotate(10); // max value triggers rotation reversal    expect(rotate(1)).toEqual('DhelloWORL');    expect(rotate(2)).toEqual('LDhelloWOR');    expect(rotate(6)).toEqual('oWORLDhell');    rotate(10); // max value triggers rotation reversal    expect(rotate(1)).toEqual('elloWORLDh');    expect(rotate(2)).toEqual('lloWORLDhe');    expect(rotate(6)).toEqual('ORLDhelloW');  });我对如何通过上述测试规范感到困惑。我需要在我的代码中插入一个 if 语句加上 break 吗?请让我通过上述规范缺少什么代码。
查看完整描述

1 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

您需要一种方法来设置返回函数的状态。一种方法是将您捕获的值包含在指示方向的闭包中。然后您可以在函数中进行操作。例如:


function rotater (str){

  let dir = 1                  // flag captured in closure

  return function (num){

    if (num == str.length) {

        dir *= -1              // manipulate it where appropriate 

    }

我将标志设置为正数或负数 1,因为这样使用起来非常方便slice()(可以很好地处理负数),而不是使用以下内容进行拆分和循环:


function rotater (str){

  let dir = 1

  return function (num){

    if (num == str.length) {

        dir *= -1

        return str

    }

    return str.slice(dir * num) + str.slice(0, dir * num)

  }

}


const rotate = rotater('helloWORLD');

console.log(rotate(1)) 


console.log(rotate(10)) 

console.log(rotate(1)) // now reversed DhelloWORL

console.log(rotate(6))


rotate(10)

console.log(rotate(1)) // back to forward elloWORLDh


查看完整回答
反对 回复 2021-06-18
  • 1 回答
  • 0 关注
  • 118 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信