Ama*_*irk 42 javascript arrays jquery
我有一个包含一些值的数组,我想得到它们的总和.这是一个例子:
var somearray = ["20","40","80","400"];
Run Code Online (Sandbox Code Playgroud)
我想使用jQuery对这些值求和.在这个例子中,结果将是540.
vol*_*ron 64
要处理浮点数:
(旧)JavaScript:
var arr = ["20.0","40.1","80.2","400.3"],
n = arr.length,
sum = 0;
while(n--)
sum += parseFloat(arr[n]) || 0;
Run Code Online (Sandbox Code Playgroud)ECMA 5.1/6:
var arr = ["20.0","40.1","80.2","400.3"],
sum = 0;
arr.forEach(function(num){sum+=parseFloat(num) || 0;});
Run Code Online (Sandbox Code Playgroud)ES6:
var sum = ["20.0","40.1","80.2","400.3"].reduce((pv,cv)=>{
return pv + (parseFloat(cv)||0);
},0);
Run Code Online (Sandbox Code Playgroud)
reduce()在较旧的ECMAScript版本中可用,箭头函数是特定于ES6的版本.
我传递0作为第一个pv值,所以我不需要围绕它的parseFloat - 它将始终保持前一个总和,它总是数字.因为当前值cv可以是非数字(NaN),我们使用||0它来跳过数组中的该值.如果你想分解一个句子并得到其中数字的总和,那就太棒了.这是一个更详细的例子:
let num_of_fruits = `
This is a sentence where 1.25 values are oranges
and 2.5 values are apples. How many fruits are
there?
`.split(/\s/g).reduce((p,c)=>p+(parseFloat(c)||0), 0);
// num_of_fruits == 3.75
Run Code Online (Sandbox Code Playgroud)
jQuery的:
var arr = ["20.0","40.1","80.2","400.3"],
sum = 0;
$.each(arr,function(){sum+=parseFloat(this) || 0;});
Run Code Online (Sandbox Code Playgroud)以上是什么让你:
123或"123"),浮点字符串或数字("123.4"或123.4),甚至文本(abc)Mar*_*ers 56
你不需要jQuery.您可以使用for循环执行此操作:
var total = 0;
for (var i = 0; i < someArray.length; i++) {
total += someArray[i] << 0;
}
Run Code Online (Sandbox Code Playgroud)
有关:
Cod*_*ler 29
您可以使用reduce哪个适用于IE8及更低版本以外的所有浏览器.
["20","40","80","400"].reduce(function(a, b) {
return parseInt(a, 10) + parseInt(b, 10);
})
Run Code Online (Sandbox Code Playgroud)
Pra*_*yan 24
另一种方法,如果eval是安全和快速的:
eval(["10","20","30","40","50"].join("+"))
Run Code Online (Sandbox Code Playgroud)
gio*_*_13 11
如果你想让它成为一个jquery方法,你可以这样做:
$.sum = function(arr) {
var r = 0;
$.each(arr, function(i, v) {
r += +v;
});
return r;
}
Run Code Online (Sandbox Code Playgroud)
并称之为:
var sum = $.sum(["20", "40", "80", "400"]);
Run Code Online (Sandbox Code Playgroud)
在http://bugs.jquery.com/ticket/1886 中,很明显 jQuery 开发人员有严重的心理问题。函数式编程启发了添加。不知何故,拥有一些基本的东西(比如地图)而不是其他东西(比如减少)是好的,除非它减少了 jQuery 的整体文件大小。去搞清楚。
有用的是,有人放置了代码来使用 jQuery 数组的普通 reduce 函数:
$.fn.reduce = [].reduce;
现在我们可以使用一个简单的 reduce 函数来创建一个求和:
//where X is a jQuery array
X.reduce(function(a,b){ return a + b; });
// (change "a" into parseFloat("a") if the first a is a string)
Run Code Online (Sandbox Code Playgroud)
最后,由于一些较旧的浏览器还没有实现 reduce,可以从MDN 中获取一个 polyfill (它很大,但我猜它具有完全相同的行为,这是可取的):
if ( 'function' !== typeof Array.prototype.reduce ) {
Array.prototype.reduce = function( callback /*, initialValue*/ ) {
'use strict';
if ( null === this || 'undefined' === typeof this ) {
throw new TypeError(
'Array.prototype.reduce called on null or undefined' );
}
if ( 'function' !== typeof callback ) {
throw new TypeError( callback + ' is not a function' );
}
var t = Object( this ), len = t.length >>> 0, k = 0, value;
if ( arguments.length >= 2 ) {
value = arguments[1];
} else {
while ( k < len && ! k in t ) k++;
if ( k >= len )
throw new TypeError('Reduce of empty array with no initial value');
value = t[ k++ ];
}
for ( ; k < len ; k++ ) {
if ( k in t ) {
value = callback( value, t[k], k, t );
}
}
return value;
};
}
Run Code Online (Sandbox Code Playgroud)
你可以这样做。
var somearray = ["20","40","80","400"];
somearray = somearray.map(Number);
var total = somearray.reduce(function(a,b){ return a+b },0)
console.log(total);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
117517 次 |
| 最近记录: |