多维数组 JAVASCRIPT 出了点问题

multidimensional array JAVASCRIPT something wrong

本文关键字:问题 JAVASCRIPT 数组      更新时间:2023-09-26

嘿伙计们,我需要 soe 帮助,请:P

这段代码有什么问题?

var arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
var narr = []; // want to be like that [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
function arange(mass) {
    for (var i = 0; i < mass.length; i++) {
        for (var j = 0; j < mass[i].length; j++) {
            narr[mass[i]].push(mass[j][i]);
        }
    }
}

如果我调用该函数,则存在一个问题:"类型错误:无法读取未定义的属性'push'。谢谢。也链接到这里

您不小心尝试在值 narr 上调用 push,而不是在数组本身上调用。当然,基元值没有定义push函数。您的代码应如下所示:

var mass = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
var narr = [];
function arange(mass) {
    for (var i = 0; i < mass.length; i++) {
        var innerArray = [];
        for (var j = 0; j < mass[i].length; j++) {
            innerArray.push(mass[j][i]);
        }
        narr.push(innerArray);
    }
}

只需使用正确的 elememt 来分配值。

var arr = [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]
    ];
function arange(mass) {
    var narr = [];
    for (var i = 0; i < mass.length; i++) {
        for (var j = 0; j < mass[i].length; j++) {
            narr[j] = narr[j] || [];
            narr[j][i] = mass[i][j];
        }
    }
    return narr;
}
document.write('<pre>' + JSON.stringify(arange(arr), 0, 4) + '</pre>');

ES6

var arr = [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]
    ];
function arange(mass) {
    var narr = [];
    mass.forEach((a, i) => a.forEach((b, j) => {
        narr[j] = narr[j] || [];
        narr[j][i] = mass[i][j];
    }));
    return narr;
}
document.write('<pre>' + JSON.stringify(arange(arr), 0, 4) + '</pre>');

或者

你可以用这个ES6一个衬里

var arr = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ];
    
var res = arr.map((e, i) => e.map((_, j) => arr[j][i]));
document.write(JSON.stringify(res));

您需要添加一个临时数组来存储中间值:

var arr = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ];
var narr = []; 
function arange(mass) {
    for (var i = 0; i < mass.length; i++) {
        var t = []; // temporary array
        for (var j = 0; j < mass[i].length; j++) {
            t.push(mass[j][i]);
        }
        narr.push(t);
    }
}
arange(arr);
document.write(JSON.stringify(narr));