我有一个使用简单数组(Array)和类型数组(TypedArray)的应用程序。
我开发了一些数组类型所需的扩展,例如(最小值、最大值、总和……)。
但这里有一个棘手的部分:如何在 JavaScript 中为所有数组定义创建的函数?
如果它们之间存在某种继承层次结构,这个问题会更简单。但到目前为止我没有发现更大的父类。
现在我正在这样做:
// MIN FUNCTION
Array .prototype.min =
Int8Array .prototype.min =
Int16Array .prototype.min =
Int32Array .prototype.min =
Uint8Array .prototype.min =
Uint16Array .prototype.min =
Uint32Array .prototype.min =
Uint8ClampedArray .prototype.min =
Float32Array .prototype.min =
Float64Array .prototype.min = function () {
// my code;
}
// MAX FUNCTION
Array .prototype.max =
Int8Array .prototype.max =
Int16Array .prototype.max =
Int32Array .prototype.max =
Uint8Array .prototype.max =
Uint16Array .prototype.max =
Uint32Array .prototype.max =
Uint8ClampedArray .prototype.max =
Float32Array .prototype.max =
Float64Array .prototype.max = function () {
// my code;
}
// GO ON...
这看起来太丑陋了,我想把我的眼睛撕下来。
我该如何改进?有什么东西可以连接所有这些类型来使用吗?
编辑问题:
如何在不显式编写所有类型的 javascript 数组的情况下编写此代码?
最佳答案
这似乎有效:
function arMax(){
var len = this.length;
var i;
var max=-Infinity;
for(i=0;i<len;i++)
if(this[i]>max)
max=this[i];
return max;
}
function arMin(){
var len = this.length;
var i;
var min=+Infinity;
for(i=0;i<len;i++)
if(this[i]<min)
min=this[i];
return min;
}
for(tp of [
Array,
Int8Array,
Int16Array,
Int32Array,
Uint8Array,
Uint16Array,
Uint32Array,
Uint8ClampedArray,
Float32Array,
Float64Array,
]){
tp.prototype.max = arMax;
tp.prototype.min = arMin;
}
console.log([ 2, 34, 3, 2, -43, -1 ].max())
console.log([ 2, 34, 3, 2, -43, -1 ].min())
关于javascript - 一次扩展所有 Javascript 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42165311/