如何求和jquery映射值

时间:2019-02-04 06:26:56

标签: javascript jquery

我具有地图功能来获取选中的复选框,我需要对该地图的值求和,但得到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

只要我玩复选框,它就会一直保持这种状态。

问题

  1. 如何在+ nf.format(prices)+中获得函数的总和?

3 个答案:

答案 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>

希望有帮助。