javascript - 一次扩展所有 Javascript 数组

标签 javascript arrays

我有一个使用简单数组(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/

相关文章:

javascript - 匿名函数导致在 AJAX 成功后不设置 id

c++ - 遍历二维数组的时间复杂度是多少

java - 当我使用 java.lang.instrument.Instrumentation#redefineClasses() 时,我应该将数组传递给函数吗?

javascript - 如何使用 ui-router 将静态登陆页面与其自己的设计集成到根路由

javascript - 谷歌表格 : manipulate DOM element

javascript - THREE.js:远处光源转换的阴影

javascript - 带有 FloatingActionButton 组件的 React-Native-Popup-Menu 无法使用 MenuTrigger 触发

ruby-on-rails - 将数组数组转换为字符串数组

ios - pickerview 不显示数组中的数据

java - 如何用Java分别对二维数组的行和列求和?