Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.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_Arrays - Fatal编程技术网

Javascript 向数组中添加值,根据输入求和或减法

Javascript 向数组中添加值,根据输入求和或减法,javascript,arrays,Javascript,Arrays,每次用户输入一个整数时,我必须创建一个新的输入文本,这些整数应该被添加到一个数组中,最后程序必须根据值进行求和或减法 例如,如果数组是这样的:[1,5,10]最终结果是:16但是如果数组是这样的[2,3,7,-1,5]最终结果应该是7,为什么?这是因为你把2+3+7相加,然后减去5 我现在面临的主要问题是,我的代码有问题,没有进行最终计算 一段代码: var arrayOfNumbers = []; var column = 1; function logingValues (){

每次用户输入一个整数时,我必须创建一个新的输入文本,这些整数应该被添加到一个数组中,最后程序必须根据值进行求和或减法

例如,如果数组是这样的:
[1,5,10]
最终结果是:
16
但是如果数组是这样的
[2,3,7,-1,5]
最终结果应该是
7
,为什么?这是因为你把
2+3+7
相加,然后减去
5

我现在面临的主要问题是,我的代码有问题,没有进行最终计算

一段代码:

var arrayOfNumbers = [];
var column = 1;

function logingValues (){

    var values = $('input[name^=valuesToSum]').map(function(idx, elem) {
            newVal = $(elem).val();
            if (isNaN(newVal)) {
              newVal = 0;
            }
            return newVal;
    }).get();

    console.log("Values aquired from inputs " + values);

    arrayOfNumbers = values;

    console.log("Values inserted on Array " + arrayOfNumbers);
}


function removeElement (id){
    $('#' + id ).remove();
    console.log("element #" + id + " was eliminated");
}

function iterateOverArray(array){

   var oldArray = array;
   var newArray = "";

   for (var i = 0; i < oldArray.length; i++) {
      newArray += " + " + oldArray[i];
   }

   return newArray;
}

function addElement (whereToPrint){

    logingValues();

    var newArray = iterateOverArray(arrayOfNumbers);

    var printId = "print" + whereToPrint;

    console.log(printId);

    console.log("we can see the array like this " + arrayOfNumbers);

    $('#'+ printId).html(newArray);

    console.log('Element was created');


      column += 1;

      var newInput  =  // here goes a template

      $('.elemPlaceHold').append(newInput);

}

function loadingBar (){

    var summingBar = '<div class="rect1"></div><div class="rect2"></div><div class="rect3"></div><div class="rect4"></div><div class="rect5"></div>';

    $('.spinner').append(summingBar);
}

function caculationEffect (countTotal){

    $('#result').html("");
    loadingBar();


    setTimeout(function(){

        $('.spinner').html("");
        $('#result').html(countTotal);
    }, 2000);
}

function calculate (){

    console.log("is calculating....");

    logingValues();
    // Variable to hold your total 
    var countTotal = 0;  
    // Variable that states how the process start (sum/subtract)
    var conditional = true;
    var changeCondition;

    for(var i = 0; i < arrayOfNumbers.length; i++) {

        if(arrayOfNumbers[i] === -1){
            changeCondition = conditional ? conditional = false : conditional;
        }else{
            if(conditional === true){
               countTotal += arrayOfNumbers[i];
            }else{
               countTotal -= arrayOfNumbers[i];
            }
        }
      }
    console.log('countTotal', countTotal);
    caculationEffect('countTotal', countTotal);
}
var arrayOfNumbers=[];
var列=1;
函数登录值(){
var values=$('input[name^=valuesToSum]').map(函数(idx,elem){
newVal=$(elem.val();
if(伊斯南(纽瓦尔)){
newVal=0;
}
返回newVal;
}).get();
日志(“从输入中获取的值”+值);
ArrayOfNumber=值;
log(“数组中插入的值”+ArrayOfNumber);
}
函数removeElement(id){
$('#'+id).remove();
log(“元素#“+id+”被删除”);
}
函数迭代平均(数组){
var oldArray=array;
var newArray=“”;
对于(var i=0;i

有什么建议吗

编辑


唯一需要考虑的是:在进行计算之前,如果数组中有一个
-1
,那么它应该减去。否则算了

如果您执行一个简单的
console.log(arrayOfNumbers),那么解决方案非常简单,您会注意到您的值存储为字符串

日志示例:
[“3”、“4”]

由于使用===运算符,JavaScript还比较值的类型。实际上,“-1”=-1返回false。这就是为什么您从未达到“changeCondition”代码的原因


使用parseInt()函数将您的“字符串”转换为数字,您的问题就会得到解决。

如果您执行一个简单的
console.log(arrayOfNumbers),那么解决方案非常简单,您会注意到您的值存储为字符串

日志示例:
[“3”、“4”]

由于使用===运算符,JavaScript还比较值的类型。实际上,“-1”=-1返回false。这就是为什么您从未达到“changeCondition”代码的原因

使用parseInt()函数将“字符串”转换为数字,您的问题就会得到解决。

试试:


var-arr=[2,3,7,-1,5];
函数计算(arr){
总数=0;
如果(arr.length>0){
var指数=arr.indexOf(-1);
如果(索引==-1){
对于(var i=0;i尝试:


var-arr=[2,3,7,-1,5];
函数计算(arr){
总数=0;
如果(arr.length>0){
var指数=arr.indexOf(-1);
如果(索引==-1){

对于(var i=0;i而言,这里存在一些问题

  • 1)
    caculationEffect
    只应接受
    countTotal
    ,但您正在传递它
    caculationEffect('countTotal',countTotal)
  • 2) 您试图像字符串一样使用
    数组fnumbers
    ,必须先将它们转换为数字
请尝试改用以下代码:

var total = 0;
var shouldSubtract = false;
for (var i = 0; i < arrayOfNumbers.length; i++) {
    if (arrayOfNumbers[i] == "") continue;
    var currentNumber = parseInt(arrayOfNumbers[i], 10);
    if (currentNumber === -1) {
        shouldSubtract = true;
    } else {
        if (shouldSubtract) {
            total -= currentNumber;
            shouldSubtract = false;
        } else {
            total += currentNumber;
        }
    }
}
caculationEffect(total);
var总计=0;
var shouldSubtract=假;
对于(变量i=0;i
这里有一些问题

  • 1)
    caculationEffect
    只应接受
    countTotal
    ,但您正在传递它
    caculationEffect('countTotal',countTotal)
  • 2) 您试图像字符串一样使用
    arrayOfNumbers
    ,但是
            if(arrayOfNumbers[i] === -1){
                changeCondition = conditional ? conditional = false : conditional;
            }else{
                if(conditional === true){
                   countTotal += arrayOfNumbers[i];
                }else{
                   countTotal -= arrayOfNumbers[i];
                }
            }
    
            if(arrayOfNumbers[i] === -1){
                changeCondition = conditional ? conditional = false : conditional;
            }else{
                if(conditional === true){
                   countTotal += arrayOfNumbers[i];
                }else{
                   countTotal -= arrayOfNumbers[i];
                   conditional = true;
                }
            }
    
        var values = $('input[name^=valuesToSum]').map(function(idx, elem) {
                newVal = $(elem).val();
                if (isNaN(newVal)) {
                  newVal = 0;
                }
                return parseInt(newVal); // parseInt or parseFloat
        }).get();
    
    caculationEffect('countTotal', countTotal);
    
    
    function caculationEffect (title, countTotal){ // add title argument
    
        $('#result').html("");
        loadingBar();
    
        setTimeout(function(){
            $('.spinner').html("");
            $('#result').html(countTotal);
        }, 2000);
    }
    
    function calculate(array) {
      return array.reduce(function(prev, curr, i, arr) {
        if(curr === -1) {
          arr[i+1] *= -1;
          return prev;
        }
        return prev + curr;
      });
    }