我有一个使用简单数组(Array)和类型数组(TypedArray)的应用程序。
我为数组类型开发了一些必要的扩展,如(min,max,sum,...)。
但这里有一个棘手的部分:如何在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数组的情况下编写此代码?
答案 0 :(得分:3)
这似乎有效:
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())
答案 1 :(得分:0)
如果您要在浏览器中找到我们,那么您可以从窗口对象本身获取可用数组的列表。
var availableAr = [];
Object.getOwnPropertyNames(window).forEach(function(name){
if( name.toString().indexOf('Array')!== -1 ){
availableAr.push( name.toString() )
}
})
console.log(availableAr);
console.log(
new window[ availableAr[0] ]()
);