在JavaScript中更改数组原型
Changing the Array Prototype in JavaScript
我正在尝试更改数组原型并访问列,就好像它们是行一样,从而进行自定义矩阵换位。我想确保对每一列的访问不需要重新分配和创建一个全新的对象来访问特定的列。
例如。。。
var mcol = new column([[0,1,2],[3,4,5],[6,7,8]]);
alert(mcol[1]);
我想要的是把这列当作一行来读。。。(对矩阵进行90度变换)
mcol[1] = [1,4,7];
有什么建议吗?
您可以使用以下构造函数:
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]
我建议您使用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
我的解决方案是一个变通方案,包括将数组复制到我不喜欢的新数组。它确实覆盖了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]
是否有人知道一种不需要有人将整个阵列复制到新阵列的解决方案?
相关文章:
- 为什么不't loadash/aunderline将util方法放在数组原型上
- 用于数组原型的JavaScript独特方法
- 在JavaScript中更改数组原型
- 如何在数组原型图中获取当前索引
- 将数组原型函数与非数组一起使用
- Javascript:分配给对象或数组原型会导致括号不起作用
- Javascript 自定义数组原型
- 为什么在 javascript 中向数组原型添加方法会破坏 for 循环上的迭代
- 使用数组原型Slice调用
- 如何通知TypeScript编译器JS数组原型的扩展
- 在数组原型中循环
- 如何在我自己的数组原型函数中使用数组函数
- JavaScript数组.原型如何设置'this'到由方法获得的新数组
- 修改数组原型会导致foreach的行为不同
- JS函数给数组.原型被视为数组属性
- JavaScript数组原型,'this'没有'push'方法
- 由于将比较方法添加到数组原型而导致测试失败.如何更新代码或测试?
- 字符串vs数组原型Javascript
- 如何创建一个Javascript哈希表/关联数组原型
- 扩展数组.原型在Node.js中,从一个require'd文件