使用默认值填充多维javascript数组矩阵



下面的代码运行良好,但我被要求在下面的代码中发现一个错误。有人能指出吗。

function defaultMatrix(size) { 
    var defaultValue = 0;
    var row = [];
    var matrix = [];
    for (var i=0; i < size; i++) { row.push(defaultValue); }
    for (var i=0; i < size; i++) { matrix.push(row); }
    return matrix;
}
console.log(defaultMatrix(6));

我认为JS中的错误是数组是被引用的对象。因此,在您的情况下,您只创建一次矩阵。你把它按成一排。

因此,在这种情况下,如果您执行以下代码:

let arr = defaultMatrix(2);
arr[0][0] = 1;

如果显示arr[1][0]和arr[2][0],则值为"1",因为所有arr[n]上的数组都相同。

对于求解,必须在每行中创建一个新数组。为了解决您的代码,您只需要更改1行:

for (var i=0; i < size; i++) { matrix.push(row.slice()); }

切片创建当前数组的副本。

但你可以在一行中完成这一切,就像这样:

function defaultMatrix(size, defaultValue = 0) { 
    return Array(size).fill(0).map(() => {return Array(size).fill(defaultValue)});
}

您将大小乘以同一行,结果是大小*size大。

function defaultMatrix(size) { 
    var defaultValue = 0;
    var rows = [];
    var matrix = [];
    for (var i=0; i < size; i++) { 
        // create row
        rows[i] = []; 
        // create cells
        for (var j=0; j < size; j++) {
            rows[i].push(defaultValue);
        }
        // add row to matrix
        matrix.push(rows[i]);
    }
    return matrix;
}
console.log(defaultMatrix(6));

如果你想每次用0初始化矩阵,那么你可以进一步简化脚本,如下所示:

function defaultMatrix(size) { 
    var matrix = [];
    for (var i=0; i < size; i++) { 
        matrix.push(new Array(size));
    }
    return matrix;
}
console.log(defaultMatrix(6));

相关内容

  • 没有找到相关文章

最新更新