也许是微不足道的,但一个阵列中的元素被另一个阵列分隔的优雅方式是什么(假设阵列长度相等)?例如将元素划分为一个数组中的元素?
var A = [2,6,12,18]
var B = [2,3,4,6]
划分应该给我:[1,2,3,3]
也许是微不足道的,但一个阵列中的元素被另一个阵列分隔的优雅方式是什么(假设阵列长度相等)?例如将元素划分为一个数组中的元素?
var A = [2,6,12,18]
var B = [2,3,4,6]
划分应该给我:[1,2,3,3]
如果你有ES5的支持,这可能是一个不错的选择:
var result = A.map(function(n, i) { return n/B[i]; });
其中n
回调代表th在A
和i
中的重复数字是在A
中的n
的索引。
+1可能符合OP的“花哨”标准 – 2012-03-13 05:54:44
[ecma5地图]( http://ecma262-5.com/ELS5_HTML.htm#Section_15.4.4.19),[来自MDN的映射](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/map)和[数组示例](http://ie.microsoft.com/testdrive/HTML5/ECMAScript5Array/Default.html)。就像其他信息一样。好答案。 – Bakudan 2012-03-13 06:09:02
假设两个数组始终是相同长度:
var C = [];
for (var i = 0; i < A.length; i++) {
C.push(A[i]/B[i]);
}
本身没有任何优雅的方法,就像避免使用整齐的技巧的forloop一样。有一些方法使用已经列出的map()
。那些最终使用(更长)forloop,但他们是更小的代码段。否则,使用此:
var C= new Array(A.length)
for(i=0;i<A.length;i++){
C[i]=A[i]/B[i];
}
是的,你是这么认为的。 – Bakudan 2012-03-13 05:59:42
@Bakudan啊,我明白你的意思了。 – Manishearth 2012-03-13 06:02:21
Eeeck。你不应该用'for(我在A)'中迭代数组。这将检索对象的属性,并可以返回除数组元素之外的其他内容。 – jfriend00 2012-03-13 06:04:35
如果您考虑改变数组原型的选项:
Array.prototype.zip = function (other, reduce, thisArg) {
var i, result = [], args,
isfunc = typeof reduce == "function",
l = Math.max(this.length, other.length);
for (i=0; i<l; i++) {
args = [ this[i], other[i] ];
result.push(isfunc ? reduce.apply(thisArg, args) : args);
}
return result;
}
var A = [2,6,12,18]
var B = [2,3,4,6]
var C = A.zip(B, function (l, r) { return l/r; });
// -> [1, 2, 3, 3]
许愿的JavaScript已经内置的ZIP方法,是吗? :-) – 2012-03-13 05:49:37
@RayToal::)有些习惯不会死亡,不管是什么! – Legend 2012-03-13 05:50:17
哦,我想我的解决方案已经足够小了。 :P – 2012-03-13 05:50:57