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;
});
}