如何在JavaScript中重新定义数组上的+运算符

How to redefine the + operator on Arrays in JavaScript?

本文关键字:数组 定义 运算符 JavaScript 新定义      更新时间:2023-09-26

假设点使用JavaScript Array表示为[x,y],我如何在点上定义+运算符,使得:

[1,2] + [5,10] == [6,12]

JavaScript没有覆盖内置算术运算符的功能。

通过重写.valueOf().toString()方法,可以获得一些有限的技巧,但我无法想象你如何做到你所要求的。

你当然可以写一个函数来完成它。

一个好的"加号"方法怎么样?这并不关心任何一个数组有多少索引,但是任何不是数字的都被转换为0。

Array.prototype.plus= function(arr){
    var  L= Math.max(this.length,arr.length);
    while(L){
        this[--L]= (+this[L] || 0)+ (+arr[L] || 0);
    }
    return this;
};
[1, 2].plus([5, 10])
/*  returned value: (Array)
[6,12]
*/
[1, 2].plus([5, 10]).plus(['cat',10,5])
/*  returned value: (Array)
6,22,5
*/

我知道这并不完全是你想做的,但解决问题的方法是这样做:

var arrayAdd = function() {
    var arrays = arguments,
        result = [0, 0];
    for( var i = 0, s = arrays.length; i < s; i++ ) {
        for( var j = 0, t = arrays[ i ].length; j < t; j++ ) {
            result[ j ] += parseInt( arrays[ i ].shift(), 10 );
        }
    }
    return result;
};
var sum = arrayAdd( [1,2], [5,10] ); //Should return [6, 12]
console.log( sum );

请注意,此代码不是最终代码。我看到一些问题:

  1. 结果数组的初始值应该是动态的
  2. 如果数组长度不相等,我还没有测试代码

祝你好运!