для l oop дает только первый или последний результат - PullRequest
0 голосов
/ 09 января 2020

Сначала я поместил возврат внутрь для l oop, но отображался только первый результат. Я провел некоторое исследование и понял, что в результате l oop удовлетворяет условию и поэтому останавливается при первом результате. Я взял его из l oop и теперь он дает только последний результат. Я не впервые сталкиваюсь с этой проблемой, и, несмотря на поиски решения, я не могу понять, что я делаю неправильно.

function diamond(n) {


  let space = " "; //spaces
  let newLine = "\n"
  let aster = "*";
  let multi = (n - 1) / 2; //variable in for loop
  let result = ""

  if ((n % 2 === 0) || n < 1) {
    return null
  } else if (n === 1) {
    return aster
  } else {

    for (let i = 0; i < multi; i++) {
      result = space.repeat(multi - i) + aster.repeat(1 + (i * 2)) + space.repeat(multi - i) + newLine;
    }
    return result // gives only the last result
  }
}

console.log(diamond(7)) //  expected "  *\n ***\n*****\n ***\n  *\n"
console.log(diamond(1)) // expected "*"
console.log(diamond(2)) // expected null

Ответы [ 2 ]

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

Как уже намекнули другие, используйте += для добавления каждой строки к результату.

function diamond(n) {


  let space = " "; //spaces
  let newLine = "\n"
  let aster = "*";
  let multi = (n - 1) / 2; //variable in for loop
  let result = ""

  if ((n % 2 === 0) || n < 1) {
    return null
  } else if (n === 1) {
    return aster
  } else {

    for (let i = 0; i < multi/2; ++i) {
      result += space.repeat(multi - i) + aster.repeat(1 + (i * 2)) + space.repeat(multi - i) + newLine;
    }
    for (let i = 0; i < multi/2 + 1; ++i) {
      result += space.repeat(i+1) + aster.repeat(1 + ((multi-1-i) * 2)) + space.repeat(i+1) + newLine;
    }
    return result // gives only the last result
  }
}

console.log(diamond(7)) //  expected "  *\n ***\n*****\n ***\n  *\n"
console.log(diamond(1)) // expected "*"
console.log(diamond(2)) // expected null
0 голосов
/ 09 января 2020

Это происходит потому, что вы присваиваете новое значение переменной result на каждой итерации l oop.

Вы хотите сначала создать переменную в виде строки.
Затем concat datas на каждую итерацию.

Примерно так:

let result = '';
for (let i = 0; i < multi; i++) {
  result += space.repeat(multi - i) + aster.repeat(1 + (i * 2)) + space.repeat(multi - i) + newLine;
}
return result;

Обратите внимание на оператор +=: -)

Надеюсь, это поможет вам.

...