如何在javascript中的方法内部传递动态变量?

时间:2018-12-26 23:55:49

标签: javascript methods

我正在构建一个函数来反转字符串,但是由于未知的原因,由于我对javascript非常陌生(仅3天),因此我无法弄清它,或者可能是我没有掌握一两个概念语言。

基本上,我确定用于循环的字符串的长度。之后,我尝试在slice方法中使用相同的循环变量,以从右到左的方式一次运行该字符串,一次只输入1个字符。

到目前为止,我知道循环工作正常,但是我没有从phrase.slice(i,1)得到任何值,但是如果我用实数替换i会起作用。

我认为我在这里有一个概念性问题,不能将动态变量分配给方法。我知道这可以使用其他方法来实现,但是我想知道为什么这样做对我来说是失败的。

function reverseWords(phrase) {

  var build_reverse_word;

  for (let i = phrase.length ; i > 0 ; i--) {

    console.log(i); //This is just to verify that my loop is working

    build_reverse_word = phrase.slice(i,1);

    build_reverse_word = build_reverse_word + build_reverse_word;
  }

  return build_reverse_word;
}

let reverse_word_result = reverseWords("Dogs are Great Animals");

console.log(reverse_word_result);

我要实现的是将字符串向后反转。谢谢您的支持。

3 个答案:

答案 0 :(得分:3)

.slice方法接受2个参数。 beginend。您只想在每次迭代中提取一个字母。但是在您的情况下,传入的参数不合适。

function reverseWords(phrase) {

  let build_reverse_word = '';

  for (let i = phrase.length; i > 0; i--) {

    let extracted_letter = phrase.slice(i - 1, i);

    build_reverse_word = build_reverse_word + extracted_letter;
  }
  return build_reverse_word;
}

let reverse_word_result = reverseWords("Dogs are Great Animals");

console.log(reverse_word_result);

避免循环的另一种解决方法是结合使用splitreverse方法。

function reverseWords(phrase) {

  // split into array
  let phraseArray = phrase.split('');
  // reverse the array contents
  phraseArray.reverse();
  // return by joining the array
  return phraseArray.join('');
}

let reverse_word_result = reverseWords("Dogs are Great Animals");

console.log(reverse_word_result);

答案 1 :(得分:0)

您的问题是您使用的是list.slice(startIndex,endIndex)方法。 slice方法定义为endIndex。由于您的代码使21始终为1,因此JS试图查找以高数字开头的单词,例如说1到低数字function reverseWords(phrase) { var build_reverse_word; for (let i = phrase.length ; i > 0 ; i--) { console.log(i); //This is just to verify that my loop is working build_reverse_word = phrase.slice(i-1,i); console.log(build_reverse_word) build_reverse_word = build_reverse_word + build_reverse_word; } return build_reverse_word; } let reverse_word_result = reverseWords("Dogs are Great Animals"); console.log(reverse_word_result); ,而该单词永远不会工作。所有切片必须具有endIndex> startIndex。因此,您的代码应如下所示。

gvim

现在...您的代码还有其他问题,但是由于您是JS的新手,所以我认为最好自己解决一个问题!

答案 2 :(得分:0)

Sushanth为您提供了解决问题的方法!但是由于您也在学习语言,所以我想给您一些关于字符串的原则:

字符串是父对象String和六个基元之一的实例。可以使用括号[]或方法charAt访问字符串中的字符。

这意味着charAt或方括号符号也可以使用,并且可能比使用slice少混淆。

const stringValue = "Dogs are Great Animals"; //make it a constant (it will not change)

//a string is a instance of the super String, which has methods to it like slice and toUppercase.

console.log(stringValue[1]); //get the letter at position 1 - remember JavaScript is zero based.

//use a countdown (more memory efficient and less complicated
let reversed = "";
for (let i = stringValue.length-1; i >= 0; i--)
{
  reversed += stringValue[i];//use the += as a shorthand for reversed = reversed + ...
}
console.log(reversed);

您还可以使用split将字符串转换为数组并优化代码(不使用循环)

const stringValue = "Dogs are great animals";
let reversed = "";

//We can use the split method to turn the string into an array
reversed = stringValue.split("");
reversed = reversed.reverse(); // now the array can be reversed
console.log(reversed.join("")); //we use join to glue the string back together.

这些当然可以结合起来:
并在其中进行一些错误检测。

function reverseWords(phrase) {
  //test if phrase is string
  if (Object.prototype.toString.call(phrase) === "[object String]") {
    return phrase.split("").reverse().join("");
  }
  else
  {
    return "Error: object is not a string"; //return error
  }
}

let reverse_word_result = reverseWords("Dogs are Great Animals");

console.log(reverse_word_result);