Javascript-反转数组的每个字符串

问题描述 投票:0回答:2

我正在练习,我不能使用任何类型的Array.prototype.reverse或Array.prototype.join。我必须分别反转数组中的每个字符串,并将它们打印在单独的行上。

这是我尝试过的:

// Create a function that reverses elements of a string

let reversedStuff = function (str) {
  let newReversed = "";
  for (let i = str.length - 1; i >= 0; i--) {
    newReversed += str[i];
  }
  return newReversed;
};


// Use the previous function to apply the reverse on each string of an array

const args = process.argv.slice(2);
let allArr = [];
let eachWord = function (args) {
  for (let y = 0; y <= args.length; y++) {
    return functionReverse(args)
  }
};
console.log(eachWord(args));

问题出在我的第一个功能上。我无法悄悄地找到一种在数组的每个字符串上应用反向函数的方法,它仅适用于第一个字符串。关于如何解决此问题的任何提示?

非常感谢!

javascript arrays string reverse
2个回答
0
投票

您的意思是在代码中使用reverseStuff(args[y])而不是return functionReverse(args)吗?因为,第一个将为每个字符串调用反向函数。第二个错误可能是错误的,因为您的代码中没有名为functionReverse的函数。即使它存在,您正在做的是每次在整个数组args的长度范围内用整个字符串数组调用该函数。缺少args[y]是主要问题。在这里,您正在访问数组args的yth索引处的值,这是您想要执行的操作。另外,正如@ASDFGerte指出的那样,<=应该为<,因为第一个将返回undefined

还请注意,通过上述更改,该函数将遍历数组,但由于它不返回任何内容,因此console.log(eachword(args))行将打印为未定义。在这种情况下,您可以执行以下操作:

// inside the for loop in eachWord
console.log(reverseStuff(args[y]);

或者,更好的解决方案如下:

const args = process.argv.slice(2);
let allArr = [];
let eachWord = function (args, cb) {
  for (let y = 0; y < args.length; y++) {
      cb(reverseStuff(args[y]));
  }
};
let cb = function(reveredString) {
    // do what you want here
    // for example
    allArr.push(reveredString);
    // or just simply print
    console.log(reversedString);
};
eachWord(args, cb);

希望这会有所帮助!


0
投票

第二个功能有一些问题:

  1. 您正在将整个数组而不是元素传递给functionReverse。改为传递元素args[y],如下所示:functionReverse(args[y])。另外,您可能想调用reversedStuff而不是functionReverse

  2. 循环条件应为y < args.length,因为数组是零索引的。

  3. return语句在第一次迭代后结束for循环,因为return退出了该函数。相反,您应该在函数内定义数组,然后在末尾返回该数组:

let eachWord = function (args) {
   let allArr = [];
   for (let y = 0; y <= args.length; y++) {
     allArr.push(reversedStuff(args[y]));
   }
   return allArr;
};
console.log(eachWord(args));

更好/更惯用的解决方案是使用Array.prototype.map而不是循环:

Array.prototype.map

let eachWord = function (args) { return args.map(reversedStuff); }; console.log(eachWord(args)); 返回一个新数组,其中每个元素都是将给定函数应用于源数组中每个元素的结果。

© www.soinside.com 2019 - 2024. All rights reserved.