Javascript - обращение каждой строки массива - PullRequest
0 голосов
/ 07 января 2020

Я работаю над упражнением и Я не могу использовать любой вид 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));

Проблема в моей первой функции. Я не могу спокойно найти способ применить обратную функцию к каждой строке массива, она применяется только к первой. Любые советы о том, как решить эту проблему?

Заранее большое спасибо!

Ответы [ 4 ]

0 голосов
/ 07 января 2020

Спасибо всем за помощь! Я закончил тем, что закончил примерно так:

const revereString = function () {
  const args = process.argv.slice(2);
  let result = '';
  // First loop that look into each string in the array
  for (let i = 0; i < args.length; i++) {
    let str = '';
    // Second loop that look into each letters of each string, and reverse them
    for (let j = args[i].length - 1; j >= 0; j--) {
      str += args[i][j];
    }
    // Printing each reversed string on their own line, until the last string of an array.
    result += str;
    if (i !== args.length - 1) {
      result += str + '\n';
    }

  }
  return result;
};

console.log(revereString());

Я не мог использовать .reverse или .join для этого упражнения, но я все еще принимаю к сведению ваши советы. Они делают это выглядит так просто!

0 голосов
/ 07 января 2020

Вы имели в виду reverseStuff(args[y]) в своем коде вместо return functionReverse(args)? Потому что первый вызовет обратную функцию для каждой строки. Второй, вероятно, будет ошибкой, поскольку в вашем коде нет функции с именем functionReverse. Даже если он существует, вы вызываете эту функцию со всем массивом строк каждый раз для длины аргументов массива. Отсутствующий args[y] является основной проблемой. Здесь вы получаете доступ к значению по y-му индексу аргументов массива, что вы и хотели сделать. Кроме того, как указал @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 голосов
/ 07 января 2020

Гораздо более простое решение - используйте приведенную ниже функцию

    function reverseArray(arr) {
       for(let idx in arr) { 
         arr[idx] = arr[idx].split('').reverse().join('');
       }
    }
    
    const sampleArr = ['ABC', 'DEF','GHI','JKL'];
    
    console.log('Before Reverse', sampleArr);
    
    reverseArray(sampleArr);
    
    console.log('After Reverse', sampleArr);

Редактировать:

Если вы не хотите изменять существующий массив, используйте функцию ниже

        function reverseArray(arr) {
           return arr.map(item => item.split('').reverse().join(''));
        }
        
        const sampleArr = ['ABC', 'DEF','GHI','JKL'];
        const reverseArr = reverseArray(sampleArr);
        console.log('Before Reverse', sampleArr);
        console.log('After Reverse', reverseArr);
0 голосов
/ 07 января 2020

Есть несколько проблем с вашей второй функцией:

  1. Вы передаете весь массив в functionReverse вместо элемента. Вместо этого передайте элемент args[y], например: functionReverse(args[y]). Кроме того, вы, вероятно, хотели вызвать reversedStuff вместо functionReverse.

  2. Условие l oop должно быть y < args.length, поскольку массивы индексируются нулем.

  3. Оператор return завершает for для l oop после первой итерации, поскольку 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));

Лучше / более идиоматическое c решение будет использовать Array.prototype.map вместо al oop:

let eachWord = function (args) {
   return args.map(reversedStuff);
};
console.log(eachWord(args));

map возвращает новый массив, где каждый элемент является результатом применения данной функции к каждому элементу в исходном массиве ,

...