代码之家  ›  专栏  ›  技术社区  ›  Barny

纯javascript,静态数组的延迟加载

  •  0
  • Barny  · 技术社区  · 3 年前

    我有一个数组,其中包含了阶乘的前10000个值,以字符串的形式(1-10000). 我把它作为函数的一部分放在一个数组中。

    <!DOCTYPE html>
    <html>
    <body>
    <p>Provide input number, then click on accept. Textbiox value will change to appropriate value.</p>
    Name: <input type="text" id="myText" value="Mickey">
    
    <button onclick="myFunction()">accept</button>
    
    <script>
    function myFunction() {
    var values = ["1",
    "2",
    "6",
    "24",
    "120",
    "720",
    "5040",
    "40320",
    "362880",
    "3628800",
    "39916800",...
    

    延迟加载是我所追求的特性,但它们都是在运行时生成数组值的序列/函数,或者是从其他地方加载图像的图像数组。

    1 回复  |  直到 3 年前
        1
  •  2
  •   CertainPerformance    3 年前

    我会在请求时生成值。如果您担心性能,可以创建缓存,以免重新计算已找到的值。

    const factorials = new Map();
    document.querySelector('button').addEventListener('click', () => {
      const val = Number(document.querySelector('#myText').value);
      if (!val || !Number.isInteger(val) || val < 0) return console.log('bad input...');
      console.log(String(getFactorial(BigInt(val))));
    });
    const getFactorial = (n) => {
      if (factorials.has(n)) return factorials.get(n);
      if (n === 1n) return 1n;
      const fact = getFactorial(n - 1n) * n;
      factorials.set(n, fact);
      return fact;
    };
    <input type="text" id="myText" value="5">
    
    <button>accept</button>