我具有地图功能来获取选中的复选框,我需要对该地图的值求和,但得到NaN
var prices = $("input:checkbox:checked").map(function(){
return $(this).val();
}).get();
var number = prices;
var nf = new Intl.NumberFormat('en-US', {
maximumFractionDigits:0,
minimumFractionDigits:0
});
var formattedNumber = nf.format(number);
$('.paybutton').append('<a class=" btn-link" href="">'+ nf.format(prices)+'</a>');
console.log(prices);
在玩复选框时会返回下面的数据,所以我想我的地图还可以。
Array [ "5467457" ]
Array [ "57558", "5467457" ]
Array [ "57558" ]
Array []
另一方面,我附加的数据如下:
5,467,457NaN57,55805,467,4570
只要我玩复选框,它就会一直保持这种状态。
+ nf.format(prices)+
中获得函数的总和?答案 0 :(得分:1)
您正在将数组传递给nf.format(number);
相反:
function add(a, b) {
return a + b;
}
var number = prices.reduce(add, 0);
然后执行nf.format(number);
答案 1 :(得分:0)
您的方法似乎是正确的,但我必须说jquery map
的工作方式很怪异,那些返回Array的内容让我想了一会儿,但后来我意识到这是map,它返回了array中的值,因此多个数组。我能够使用普通的javascript和Mihir建议获取选中的复选框的总和。看起来如下
const checkboxes = document.querySelectorAll('input[type=checkbox]');
// this could have been avoided if NodeList had map method
const prices = [];
checkboxes.forEach(chkbox => prices.push(chkbox.checked && Number(chkbox.value)));
const totalSum = prices.reduce((a, b) => a + b, 0);
console.log(totalSum)
我测试了几次似乎效果很好
答案 2 :(得分:0)
尝试一下:
var prices = $("input:checkbox:checked").map(function(){
return $(this).val();
}).get();
function formatCurr(arr){
var n = 0;
if(arr.length){
$.each(arr, function(k, v){
n += parseFloat(v);
});
}
return n.toLocaleString('en-US');
}
$('.paybutton').append('<a class=" btn-link" href="">'+ formatCurr(prices) +'</a>');
可能不是唯一的方法。我怀疑这是其中之一。输入为[ "5467457" ]
,输出为5,467,457
。
工作示例
$(function() {
function formatCurr(arr) {
var n = 0;
if (arr.length) {
$.each(arr, function(k, v) {
n += parseInt(v);
});
}
return n.toLocaleString('en-US');
}
console.log(formatCurr(["5467457"]));
console.log(formatCurr(["57558", "5467457"]));
console.log(formatCurr(["57558"]));
console.log(formatCurr(["9876543210"]));
console.log(formatCurr(["1001", "2002", "3003", "4004", "5005"]));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
希望有帮助。