【问题标题】:How to create an array with a certain pattern in 'javascript'如何在“javascript”中创建具有特定模式的数组
【发布时间】:2023-03-10 14:10:01
【问题描述】:

如何创建一个数组 给定 n>=0,创建一个长度为 n*n 的数组,其中 n=3 的模式如下所示:{0, 0, 1, 0, 2, 1, 3, 2, 1 }

squareUp(3) → 0,0,1,0,2,1,3,2,1
squareUp(2) → 0,1,2,1
squareUp(4) → 0,0,0,1,0,0,2,1,0,3,2,1,4,3,2,1

我已经编写了以下代码并且它可以工作,但我认为有一种更简单更好的方法来处理这个问题。

function squareUp(n){
        let a = n;
        let x;
        let nums = checker(n);
        let num = [];
        while (a >= 1){
            let j = nums.slice(0,n);
            /*console.l*/
            let x = mod(j,a);
            pusher(nums,x);
            a--;
        }
        return nums.slice(n,);
    }
    function checker(n){
        let x = [];
        while (n >= 1){
            x.push(n);
            n--;
        }
        return x;
    }
    function mod(nums,n){
        let numb = [];
        for (var i = 0;i < nums.length;i++){
            let x = nums[i] % n;
            numb.unshift(x);
        }
        return numb;
    }
    function pusher(arr1,arr2){
        for (var i = 0;i < arr2.length;i++){
            arr1.unshift(arr2[i]);
        }
        return arr1;
    }

代码太长,希望有更好的方法来做题

【问题讨论】:

    标签: javascript arrays performance while-loop javascript-objects


    【解决方案1】:

    您可以使用两个嵌套循环和一个变量作为值。这是由外循环设置的,内循环的每一步都会递减直到零。

    function square(n) {
        if (!n) return [];
    
        const result = [];
        
        for (let i = 0; i <= n; i++) {
            let v = i;
            for (j = 0; j < n - 1; j++) {
                result.push(v);
                if (v) v--;
            }
        }
        
        result.push(1);
        return result;
    }
    
    console.log(square(0));
    console.log(...square(1));
    console.log(...square(2));
    console.log(...square(3));
    console.log(...square(4));

    【讨论】:

      【解决方案2】:

      function squareUp(n){
          var count = 1;
          var output = [];
          for(var i=0;i<n;i++){   
              output = output.concat(pushElem(n, count));
              count++;
          }   
          return output;
      }
      
      function pushElem(len, cnt){
          var arr = [];
          var dec = len - (len-cnt); 
          for(var i=0;i<len;i++){
              if(i < (len-cnt)){
                  arr.push(0);
              }else{
                  arr.push(dec);
                  dec--;
              }
          }
          return arr;
      }
      
      console.log(squareUp(4));

      【讨论】:

        猜你喜欢
        • 2022-11-03
        • 1970-01-01
        • 1970-01-01
        • 2012-08-08
        • 2015-05-03
        • 2020-06-24
        • 1970-01-01
        • 2021-07-31
        • 1970-01-01
        相关资源
        最近更新 更多