Не понятно поведение кода заполнения массива по диагонали

Не могу понять почему 2d-массив ext_right_x полностью заполняется единицами, когда должна быть занята только диагональ. (функция make_basis_table, второй цикл for)

Код программы:

const print = require('./utils/print.js').print;
const scan = require('./utils/scan.js').scan;

function parse_vals(vals) {
    let res = {};
    let args = vals.split(' ');
    for (el of args) {
        if (el.length > 2 && el[el.length-2] == 'x') {
            res['x'+el[el.length-1]] = +el.split('x')[0];
        }
        else if (['=','<','>','<=','>='].includes(el)) {
            res['lim_sign'] = el;
        }
        else if (('min','max').includes(el)) {
            res['tar_func'] = el;
        }
        else if (el != '->' && el != '+') {
            res['free_val'] = +el;
        }
    }
    return res;
}

function show_limits(limits) {
    for (el of limits) {
        let x = 0;
        for (tokname in el) {
            if (tokname.startsWith('x')) {
                print(el[tokname]+tokname)
                if (x < Object.keys(el).length-3) {
                    print('+', {start:' '});
                    x += 1;
                }
                print({end:' '});
            }
            else {
                x = 0
                print(el[tokname], end=' ');
            }
        }
        print({end:'\n'});
    }
}

function get_x(obj) {
    let res = [];
    for (n in obj) {
        if (n.startsWith('x')) {
            res.push(obj[n]);
        }
    }
    return res;
}

function get_func() {
    let line = scan();
    return parse_vals(line);
}

function get_limits() {
    let limits = [];
    let line = '0';
    while (line != '') {
        line = scan();
        if (line != '') {
            limits.push(parse_vals(line));
        }
    }
    return limits;
}

function set_canonical(limits) {
    let i = Object.keys(limits[0]).length-1;
    for (cur of limits) {
        let temp_lim_sign = cur['lim_sign'];
        let temp_free_val = cur['free_val'];
        delete cur['lim_sign'];
        delete cur['free_val'];
        cur['x'+i] = 1;
        cur['lim_sign'] = temp_lim_sign;
        cur['free_val'] = temp_free_val;
        i++;
    }
    return limits
}

function set_positive(limits) {
    for (let i = 0; i < limits.length; i++) {
        if (limits[i]['free_val'] < 0) {
            print((i+1)+"-ое неравенство содержит отрицательный свободный член.\nУмножение всего неравенства на -1:")
            for (el in limits[i]) {
                if (typeof limits[i][el] == 'number') {
                    limits[i][el] *= -1;
                }
            }
        }
    }
    return limits;
}

function make_basis_table(func, limits) {
    let func_x = get_x(func);
    let limits_x = [];
    limits.forEach((row) => {
        limits_x.push(get_x(row));
    });

    console.log(func_x);
    console.log(limits_x);

    let w = (Object.keys(limits_x[0]).length-1)+(limits_x.length);
    let offset = w - limits_x.length;
    let right_x = [];
    let ext_right_x = new Array(limits_x.length).fill(new Array(offset).fill(0));

    for (let i = 0; i < limits_x.length; i++) {
        right_x.push(limits_x[i][limits_x[i].length-1]);
        limits_x[i].pop();
    }

    for (let i = 0; i < right_x.length; i++) {
        ext_right_x[i][i] = right_x[i];
    }


    console.log(right_x);
    console.log(ext_right_x);
}

function main(argv) {
    print('Z = ')
    let func = get_func();
    console.log(func);
    print("Ограничения:",{start:'\n',end:'\n'});
    let limits = get_limits();
    console.log(limits);
    print("Приведение к каноничному виду:",{start:'\n',end:'\n'});
    limits = set_canonical(limits);
    console.log(limits);
    show_limits(limits);
    print("Новые ограничения:",{start:'\n',end:'\n'});
    limits = set_positive(limits);
    console.log(limits);
    show_limits(limits);
    b_tbl = make_basis_table(func, limits);
}

main(process.argv);

Так работает:

let arr = [[0,0,0],[0,0,0],[0,0,0]];
let to = [1,1,1];

for (let i = 0; i < to.length; i++) {
    arr[i][i] = to[i];
}

console.log(arr);

Ответы (0 шт):