我正在尝试更改Array原型并访问列,就好像它们是执行自定义矩阵转置的行一样。我希望确保每个列的访问不需要重新分配和创建一个全新的对象来访问特定的列。
例如..。
var mcol = new column([[0,1,2],[3,4,5],[6,7,8]]);
alert(mcol[1]);我正在寻找的是读取列,就好像它是一行...(对矩阵进行90度变换)
mcol[1] = [1,4,7];有什么建议吗?
发布于 2012-08-02 06:47:47
您可以使用此构造函数:
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]发布于 2012-08-02 06:54:33
我建议你用column方法做一个Matrix构造器:
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) https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/map
发布于 2012-08-09 03:07:10
我的解决方案是一种变通方法,涉及将数组复制到我不喜欢的新数组中。它确实覆盖了Array原型。
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]);警报1、4、7
有没有人知道不需要有人将整个数组复制到新数组中的解决方案?
https://stackoverflow.com/questions/11768595
复制相似问题