如何在JavaScript中重新定义数组上的+运算符
How to redefine the + operator on Arrays in JavaScript?
假设点使用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 );
请注意,此代码不是最终代码。我看到一些问题:
- 结果数组的初始值应该是动态的
- 如果数组长度不相等,我还没有测试代码
祝你好运!
相关文章:
- 是否有任何方法可以使用jQuery替换在数组中定义值的文本
- 用于检查数组中是否存在元素的javascript自定义方法
- Regex提取URL返回数组的一部分;未定义”;
- Javascript Float32数组抛出无法读取属性'0'即使数组定义良好,也为null
- 角度推入数组给出:TypeError:无法读取属性'推'的未定义
- 处理docXTemplater或javascript对象数组中未定义的值
- Join架构验证:Join.object定义数组中的有效键
- 为什么typeof的数组的数组的未定义值返回为“0”;未定义的“;我的条件不认为是真的
- 如何用Typescript用自定义方法实现类数组
- 使用数组自定义对象
- JavaScript/jQuery JSON数组问题-值为未定义
- 返回由键/值对定义的数组
- 迭代和修改Firebase数组会导致未定义
- 拆分字符串数组(JavaScript)后未定义
- 在使用JavaScript推送数组时定义索引
- javascript函数外未定义的数组
- 用HTML5FileReader填充的Javascript多维数组未定义(但仅在首次使用时!)
- 访问数组定义中的相对索引项
- 为这个JSON输入数组定义ng模型——AngularJS
- 当数组定义为3时,一个Javascript - forth值的神秘工作没有返回异常