【问题标题】:why i cant get the result of pascal tri in the dom为什么我无法在 dom 中得到 pascal tri 的结果
【发布时间】:2020-04-29 11:24:55
【问题描述】:

我试图通过 onclick 事件进行三帕斯卡练习,但结果仍未定义 好像我不知道如何调用函数。

        var call = function() {
            var numberOfRows = document.getElementById('Niveaux').value;;
            document.getElementById('result2').innerHTML = generate(numberOfRows);
            document.getElementById('result1').innerHTML = 'Triangle de pascal a '+numberOfRows+' Niveau';
        };

        var generate = function (numberOfRows) {
            //numberOfRows = document.getElementById('Niveau').value
            let triangle = [[1], [1,1]]
            if (numberOfRows === 0){
                return []
            }else if(numberOfRows == 1){
                return [[1]]
            }else if (numberOfRows == 2){
                return [[1], [1,1]]
            }else {
                for (var i = 2; i < numberOfRows; i++) {
                    addRow(triangle)
                }

            }

        };

        var addRow = function (triangle) {
            let previous = triangle[triangle.length - 1]
            let newRow = [1]
            for (var i = 0; i < previous.length - 1; i++) {
                let current = previous[i]
                let next = previous[i+1]
                newRow.push(current + next)
            }
            newRow.push(1)
            return triangle.push(newRow)
        }
  <p>Niveau tri de pascal : <input type="text" id="Niveaux" value="10"></p>
    <button onclick="call()">Calcules</button><hr>
    <h3 id="result1"></h3>
    <p id="result2"></p>

【问题讨论】:

  • 对不起,我对未定义中的问题感到愤怒,我不明白问题出在哪里,我试图根据输入中的数字显示帕斯卡三角形,似乎我无法调用该函数生成并内化结果
  • 取消注释generate中的第一行,并将值解析为数字。您从 HTML 中得到的只是字符串,当您将字符串与数字进行比较时,严格的比较不会通过。

标签: javascript html arrays loops dom


【解决方案1】:

为什么我无法在 dom 中得到 pascal tri 的结果?

因为当用户输入的numberOfRows大于2,即3、4、5等时,else部分被执行

else {
   for (var i = 2; i < numberOfRows; i++) {
      addRow(triangle);
   }

}

函数addRow 的返回值未被使用。而是将函数的结果保存在变量中,然后返回。

注意 - triangle.push(newRow); -> push 函数返回数组的新长度。

function call() {
  var numberOfRows = document.getElementById('Niveaux').value;;
  document.getElementById('result2').innerHTML = generate(numberOfRows);
  document.getElementById('result1').innerHTML = 'Triangle de pascal a ' + numberOfRows + ' Niveau';
};

var generate = function(numberOfRows) {
  numberOfRows = +(document.getElementById('Niveaux').value);
  let triangle = [
    [1],
    [1, 1]
  ]
  if (numberOfRows === 0) {
    return [];
  } else if (numberOfRows == 1) {
    return [
      [1]
    ];
  } else if (numberOfRows == 2) {
    return [
      [1],
      [1, 1]
    ]
  } else {
    for (var i = 2; i < numberOfRows; i++) {
      result = addRow(triangle);
      return result;
    }
  }
  return numberOfRows;
};

var addRow = function(triangle) {
  let previous = triangle[triangle.length - 1];
  let newRow = [1];
  for (var i = 0; i < previous.length - 1; i++) {
    let current = previous[i];
    let next = previous[i + 1];
    newRow.push(current + next);
  }
  newRow.push(1);
  triangle.push(newRow);
  return triangle;
}
<p>Niveau tri de pascal : <input type="text" id="Niveaux" value="10"></p>
<button onclick="call()">Calcules</button>
<hr>
<h3 id="result1"></h3>
<p id="result2"></p>

--编辑--

function call() {
  var numberOfRows = document.getElementById('Niveaux').value;;
  generate(numberOfRows);
  document.getElementById('result1').innerHTML = 'Triangle de pascal a ' + numberOfRows + ' Niveau';
};

var generate = function(numberOfRows) {
  numberOfRows = +(document.getElementById('Niveaux').value);
  let triangle = [
    [1],
    [1, 1]
  ]
  if (numberOfRows === 0) {
    return [];
  } else if (numberOfRows == 1) {
    return [
      [1]
    ];
  } else if (numberOfRows == 2) {
    return [
      [1],
      [1, 1]
    ]
  } else {
    for (var i = 2; i < numberOfRows; i++) {
      addRow(triangle);
    }
  }
  printRow(triangle);
};

var addRow = function(triangle) {
  let previous = triangle[triangle.length - 1];
  let newRow = [1];
  for (var i = 0; i < previous.length - 1; i++) {
    let current = previous[i];
    let next = previous[i + 1];
    newRow.push(current + next);
  }
  newRow.push(1);
  triangle.push(newRow);
  return triangle;
}

const printRow = function(rows) {
  let pascalRow = "";
  for (let row of rows) {
    pascalRow += `${row.join(' ')} <br>`;
  }
  document.body.querySelector('#result2').innerHTML = pascalRow;
}
<p>Niveau tri de pascal : <input type="text" id="Niveaux" value="10"></p>
<button onclick="call()">Calcules</button>
<hr>
<h3 id="result1"></h3>
<p id="result2"></p>

【讨论】:

  • 还没有说服兄弟,请详细点
  • @AbdelhakBoumezrag - 你能澄清一下吗?
  • @AbdelhakBoumezrag - 见编辑。您已经在生成行数组,只需要在 DOM 中显示即可。
猜你喜欢
  • 1970-01-01
  • 2021-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-25
  • 2013-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多