Как создать массив с определенным шаблоном в 'javascript' - PullRequest
0 голосов
/ 14 июля 2020

Как создать массив При 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;
    }

Код слишком длинный, и я надеюсь, что есть лучший способ ответить на вопрос

Ответы [ 2 ]

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

Вы можете взять два вложенных цикла и переменную в качестве значения. Он устанавливается внешним l oop и на каждом шаге внутреннего l oop уменьшается до нуля.

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));
0 голосов
/ 14 июля 2020

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));
...