Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取数组值并添加它们(如果它们是数字)_Javascript_Jquery_Html - Fatal编程技术网

Javascript 获取数组值并添加它们(如果它们是数字)

Javascript 获取数组值并添加它们(如果它们是数字),javascript,jquery,html,Javascript,Jquery,Html,我想知道如何从代码生成的数组中获取值,然后将它们添加到单个变量中: var selector = 'input[name^="Textbook"]'; $(selector).on('click', function() { var checked = $(selector + ':checked').map(function() { return { 'type': this.type,

我想知道如何从代码生成的数组中获取值,然后将它们添加到单个变量中:

      var selector = 'input[name^="Textbook"]';
        $(selector).on('click', function() {
          var checked = $(selector + ':checked').map(function() {
            return {
              'type': this.type,
              'value': this.value
            };
          }).get().filter(function(o) {
            return '-1' !== o.value; // skip if value = -1(No)
          });
          console.log('checked inputs', checked);
        });
      }
我已经检查了javascript中的函数,如.reduce,根据developer.mozila.org,“将其减少为单个值”。尽管我的目标是只添加数值,而且数组也有非数值。我怎样才能做到这一点?谢谢

编辑: 下面是一个数组示例,上面的代码通过变量“checked”可以输出该数组:

我的目标是添加所有“值”数据,而忽略非数字数据

编辑2:这是HTML代码。我不太确定如何向您展示一个工作版本,因为它也依赖于PHP,而像JSFIDLE这样的网站不支持它

                  <label class="radio-inline">
                    <input form="ES4S" type="radio" name="Supplies1" value="'.$Result[$i]['ID'].'"> Yes
                    <input form="ES4S" type="hidden" style="display:none" value="'.$Result[$i]['ID'].'" name="SuppliesID'.$i.'">
                  </label>
                  <label class="radio-inline">
                    <input form="ES4S" type="radio" name="Supplies1" value="-1">No
                  </label>

对
不

您需要按is编号进行筛选,然后使用reduce获得列表的总和

var priceList=[{value:“190”},{value:“180”},{value:“Charge”}];
//速记代码
log(priceList.map(n=>Number(n.value)).filter(n=>!isNaN(n)).reduce(函数(a,b){returna+b;}));
//完整代码
priceList=priceList.map(n=>Number(n.value));
priceList=priceList.filter(n=>!isNaN(n));
让priceSum=priceList.reduce(函数(acc,val){return acc+val;});

控制台日志(priceSum)使用reduce并在将其分解为总和时检查该值是否为数字:

var选择器='input[name^=“textucle”];
$(选择器).parent()。在('click',选择器,函数()上){
var checked=$(`${selector}:checked`)。get()
var总和=已检查。减少((c,p)=>{
如果(!(isNaN(+p.value)))
c+=+p.值;
返回c;
},0)
console.clear();
console.log('sum',sum);
});

对
不

对 不


看起来你的函数依赖于HTML-你能给出一个HTML和所需输出的例子吗?最好创建一个工作代码片段和所需输出。HTML看起来怎么样?我不确定用户何时以及如何输入。在PHP位中填入将呈现的内容(例如,复制呈现页面的HTML,而不是您的代码)。Hm上面的数组有两组变量(参考我上传的图像)。我想知道如何获得什么价值。:)我已经更新了我的代码以使用2组variables@DeathKing你能检查一下吗?如果有任何问题,请告诉我。干杯!这对我很有效。这段代码对我来说也更有意义!:)我们可以做很多改进,特别是在变量名方面,但归根结底还是取决于偏好。祝你在寻找最适合你的方法的过程中好运我想知道我是否可以让这段代码每秒运行一次,以检查选中的输入框,而不是只在单击表单时才触发@vol7ronCheck
setInterval
。。但由于它是“点击”的,所以无论间隔值是多少,它都不会每秒更新一次
const checked = [{"type":"radio","value":"100"},{"type":"checkbox","value":"MPM Charge"},{"type":"radio","value":"100.25"},{"type":"radio","value":"100"},{"type":"radio","value":"MPM Charge"},{"type":"radio","value":"100.5"},{"type":"radio","value":"100"},{"type":"radio","value":"MPM Charge"}]

Array.prototype.sum_values = function (prop, i, running_total = 0) {

  const array = Object.assign([], this)

  if (i === 0) {
    return running_total
  } else {
    const val = array[i - 1][prop] // property you want to add up
    const num = Number(val) // convert string to number
    if (isNaN(num)) { // if converted string in not a number
      return array.sum_values(prop, i - 1, running_total) // add nothing
    } else {
      return array.sum_values(prop, i - 1, running_total + num) // add number
    }

  }

}

const test = checked.sum_values('value', checked.length)
console.log(test) // 500.75
// Place the function where your checked array is console logged
var selector = 'input[name^="Textbook"]';
$(selector).on('click', function() {
  var checked = $(selector + ':checked').map(function() {
    return {
      'type': this.type,
      'value': this.value
    };
  }).get().filter(function(o) {
    return '-1' !== o.value; // skip if value = -1(No)
  });
  let sum = checked.sum_values('value', checked.length)
  console.log('checked inputs', sum);
  return sum
})