在JavaScript中更改数组原型

在JavaScript中更改数组原型,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,我试图更改数组原型并访问列,就好像它们是行一样,以便进行自定义矩阵转换。我想确保访问每一列不需要重新分配和创建一个全新的对象来访问特定的列 例如 var mcol = new column([[0,1,2],[3,4,5],[6,7,8]]); alert(mcol[1]); 我要找的是把这列当作一行来读。。。(在矩阵上进行90度变换) 有什么建议吗 您可以使用此构造函数: function column() { var arr = Array.prototype.slice.call

我试图更改数组原型并访问列,就好像它们是行一样,以便进行自定义矩阵转换。我想确保访问每一列不需要重新分配和创建一个全新的对象来访问特定的列

例如

var mcol = new column([[0,1,2],[3,4,5],[6,7,8]]);
alert(mcol[1]);
我要找的是把这列当作一行来读。。。(在矩阵上进行90度变换)


有什么建议吗

您可以使用此构造函数:

function column() {
    var arr = Array.prototype.slice.call(arguments);

    return arr;
}
允许你做你想做的事

var mcol = new column([0,1,2], [3,4,5], [6,7,8]);
alert(mcol[1]); // alerts [3, 4, 5]

您可以使用此构造函数:

function column() {
    var arr = Array.prototype.slice.call(arguments);

    return arr;
}
允许你做你想做的事

var mcol = new column([0,1,2], [3,4,5], [6,7,8]);
alert(mcol[1]); // alerts [3, 4, 5]

我建议您使用
方法制作一个
矩阵
构造函数:

function Matrix() {
  this._rows = Array.prototype.slice.call(arguments);
}
Matrix.prototype.column = function (i) {
  // See (1)
  return this._rows.map(function (row) {
    return row[i];
  });
};

var m = new Matrix([0,1,2],[3,4,5],[6,7,8]);
console.log(m.column(1)); // [1,4,7]

(1) 我建议您使用
方法制作一个
矩阵
构造函数:

function Matrix() {
  this._rows = Array.prototype.slice.call(arguments);
}
Matrix.prototype.column = function (i) {
  // See (1)
  return this._rows.map(function (row) {
    return row[i];
  });
};

var m = new Matrix([0,1,2],[3,4,5],[6,7,8]);
console.log(m.column(1)); // [1,4,7]

(1)

我的解决方案是一种变通方法,包括将阵列复制到我不喜欢的新阵列。它确实覆盖了阵列原型

    Array.prototype.rotate = function () {
      var rotated = [];
      var columns = 1; 
      for(var col = 0; col < columns; col++) {
        var myrow = [];
        for(var row = 0; row < this.length; row++){ // this.length is the longest column
          if(this[row].length > columns){
            columns = this[row].length;
          }
          if(this[row].length > col){
            myrow.push(this[row][col]);
          } else {
            myrow.push(null);
          }
        }
        rotated.push(myrow);
      }
      return rotated;
    }

var mcol = [[0,1,2], [3,4,5], [6,7,8]];
mcol = mcol.rotate();
alert(mcol[1]);
Array.prototype.rotate=函数(){
var=[];
var列=1;
for(var col=0;col列){
columns=此[行]。长度;
}
如果(此[行].长度>列){
myrow.push(此[行][col]);
}否则{
myrow.push(null);
}
}
旋转。推动(myrow);
}
返回旋转;
}
var mcol=[[0,1,2],[3,4,5],[6,7,8];
mcol=mcol.rotate();
警报(mcol[1]);
警报[1,4,7]


是否有人知道一种解决方案不需要有人将整个阵列复制到新阵列?

我的解决方案是一种变通方法,涉及将阵列复制到我不喜欢的新阵列。它确实覆盖了阵列原型

    Array.prototype.rotate = function () {
      var rotated = [];
      var columns = 1; 
      for(var col = 0; col < columns; col++) {
        var myrow = [];
        for(var row = 0; row < this.length; row++){ // this.length is the longest column
          if(this[row].length > columns){
            columns = this[row].length;
          }
          if(this[row].length > col){
            myrow.push(this[row][col]);
          } else {
            myrow.push(null);
          }
        }
        rotated.push(myrow);
      }
      return rotated;
    }

var mcol = [[0,1,2], [3,4,5], [6,7,8]];
mcol = mcol.rotate();
alert(mcol[1]);
Array.prototype.rotate=函数(){
var=[];
var列=1;
for(var col=0;col列){
columns=此[行]。长度;
}
如果(此[行].长度>列){
myrow.push(此[行][col]);
}否则{
myrow.push(null);
}
}
旋转。推动(myrow);
}
返回旋转;
}
var mcol=[[0,1,2],[3,4,5],[6,7,8];
mcol=mcol.rotate();
警报(mcol[1]);
警报[1,4,7]


有人知道一种解决方案不需要将整个数组复制到新数组吗?

为什么javascript需要保留单词prototype。难道我们不能使用Array.slice.call(参数)吗;该行所做的是使用所有数组在arguments对象上都具有的函数,arguments对象是一个看起来像数组但不是数组的特殊对象。未定义Array.slice,但已定义[].slice。因此,从array和call()中借用arguments.array.prototype.slice.call(arguments)几乎是JavaScript社区的标准实践。这是一种从arguments对象获取真实数组的方法。“地图”对此不起作用。concat()也可以使用。为什么javascript需要保留单词prototype。难道我们不能使用Array.slice.call(参数)吗;该行所做的是使用所有数组在arguments对象上都具有的函数,arguments对象是一个看起来像数组但不是数组的特殊对象。未定义Array.slice,但已定义[].slice。因此,从array和call()中借用arguments.array.prototype.slice.call(arguments)几乎是JavaScript社区的标准实践。这是一种从arguments对象获取真实数组的方法。“地图”对此不起作用。concat()也可以工作。我想做的是在不复制整个数组的情况下进行矩阵变换。行0->列0和行1->列1等等…我想做的是在不复制整个数组的情况下进行矩阵变换。第0行->第0列和第1行->第1列,依此类推。。。