Javascript возврат «пустых» строк внутри массива - PullRequest
2 голосов
/ 13 июля 2020

Я пытаюсь создать функцию, возвращающую «лестницу». Результат должен выглядеть следующим образом:

  var staircase5 = [
        "    #",
        "   ##",
        "  ###",
        " ####",
        "#####"
    ]

Код, который я написал до сих пор:

function staircase (valueA){
    const array1 = [];
    for (let i = 0; i < valueA; i++){
        let cicle = valueA[i];
        let step = " #".repeat(cicle);
        array1.push(step)
    }
console.log(array1);
}

Когда я запускаю код в VS Code, console.log(staircase(3)); , это это результат:

[ '', '', '' ]
undefined

Любая подсказка относительно того, почему он возвращает строки как '' вместо '#'? И почему на самом деле не повторяется? Большое спасибо!

Ответы [ 3 ]

1 голос
/ 13 июля 2020

В настоящее время вы пытаетесь рассматривать valueA, которое является числом, как массив. Если вы l oop от 1 до valueA, то каждый шаг должен быть пробелом, повторяющимся значением - i раз, соединенным с символом #, повторяемым i раз.

function staircase (valueA){
    const array1 = [];
    for (let i = 1; i <= valueA; i++){
        let step = " ".repeat(valueA - i) + "#".repeat(i);
        array1.push(step)
    }
    return array1;
}
console.log(staircase(5))
0 голосов
/ 13 июля 2020

Если вам нужно, чтобы результат выглядел так:

  var staircase5 = [
        "    #",
        "   ##",
        "  ###",
        " ####",
        "#####"
    ]

Ваша функция должна быть такой:

function staircase (valueA){
    const array1 = [];
    for (let i = 1; i <= valueA; i++){
        let step = " ".repeat(valueA-i)+"#".repeat(i);
        array1.push(step)
    }
  return array1
}

Объяснение

В вашей функции:

 function staircase (valueA){
     const array1 = [];
     for (let i = 0; i < valueA; i++){
         let cicle = valueA[i];
         let step = " #".repeat(cicle);
         array1.push(step)
     }
     console.log(array1); 
  }

Я полагаю, вы вызываете функцию следующим образом:

var staircase5 = staircase(5);

В этой строке: let cicle = valueA[i]; вы пытаетесь взять каждое значение valueA (как массив) и в этой строке: for (let i = 0; i < valueA; i++) вы используете его как число.

и в этой строке: let step = " #".repeat(cicle);, если ваш valuaA равен 5, ваш результат будет:

[
   " # # # # #",
   " # # # # #",
   " # # # # #",
   " # # # # #",
   " # # # # #"
]

В моем решении я использую i в " ".repeat(valueA-i)+"#".repeat(i); для перебора значений, которые вам нужны для создания массива.

Когда i приращение " ".repeat(valueA-i) будет отображать меньше пробелов. (ie: если i = 2 и valueA = 5, шаг будет: "", 3 пробела)

Тест:

function staircase (valueA){
    const array1 = [];
    for (let i = 1; i <= valueA; i++){
        let step = " ".repeat(valueA-i)+"#".repeat(i);
        array1.push(step)
    }
  return array1
}

var staircase5 = staircase(5);

console.log(staircase5)
0 голосов
/ 13 июля 2020

Вам необходимо использовать отступы.

const staircase = count => {
    let array1 = [];
    let step = ""
    for (let i = 0; i < count; i++){
        step = "#".repeat(i+1);
        array1 = [...array1, step.padStart(count, ' ')]
    }
    console.log(array1);
}

staircase(5)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...