用于将先前的顺序值减去零的Javascript公式

问题描述 投票:-1回答:3

我在我公司的专有软件中工作,我发现我可以实现JavaScript代码来在其中创建某些操作。我明白了......

是)我有的:

三个领域 - FieldA, FieldB, and FieldC.

我在做什么:

(FieldA + FieldB + FieldC) = SUM

我如何影响上述公式:

Subtract 75 from FieldC, 
 IF FieldC < 75, 
then when FieldC reaches 0, 
subtract the remainder from FieldB,
 IF FieldB < remainder, 
then when FieldB reaches 0, 
subtract remainder from FieldA.

用户输入示例:

FieldA = 20
FieldB = 30
FieldC = 40

减去75会让我失望

FieldA = 15
FieldB = 0
FieldC = 0

不幸的是,我不能简单地从SUM中减去75,因为我操纵这些单独的字段值有更深层的含义。

有人知道如何实现这个吗?即使只是指着一个函数,我也可以自己阅读它。

谢谢你的时间!

javascript subtraction sequential
3个回答
1
投票

我猜你不是真的只做减法,因为你指出这个算法与(a - x + b + c)的结果相同。如果你可以将这个变量包装在一个数组中,那么使用map函数可能是一个优雅的解决方案。

使用变量有点棘手。在JS中,您可以使用具有可变数量参数的函数,但是您不能喜欢例如python返回多个值,但您可以使用解构赋值而不是尝试使其与全局变量一起使用。当然,IE中不支持解构分配。

function substractArray(amount, items){
	return items.map(function(item){
		item = item - amount;
		amount = (-1)*item;
		if(item < 0){
			item = 0;
        }
		if(amount < 0){
			amount = 0;
        }
		return item;
    })
}

function substractVariables(amount,...args){
	var items = Array.prototype.slice.call(arguments,1);
	return substractArray(amount, items)

}

var data = [40,30,20];
console.log("substractArray");
console.log(substractArray(75,data));

var fieldA = 20;
var fieldB = 30;
var fieldC = 40;

var result = substractVariables(75,fieldC, fieldB, fieldA);

console.log("substractVariables");
console.log(result);

console.log("destructuring assignment");
[fieldC, fieldB, fieldA] = result;
console.log(fieldC, fieldB, fieldA);

0
投票

我是一个新手,所以这可能没有意义。以下是我到达的内容,看起来效果很好。我的团队和我一直未能在测试中发现任何问题。

我非常感谢大家提供的帮助。对我来说,最重要的是学习我可以在JS中使用绝对值,直到我看到Francis的代码才知道。

感谢大家!

    var Quad
    var Dual
    var FinalValue

    if (FieldC < 75)
    {
    Quad = 75 - FieldC
    Dual = Quad - FieldB
    if (Dual > 0)
    {FinalValue = Dual - FieldA
    if (FinalValue >= 0)
    {0}
    else
    {Math.abs(FinalValue)}
    }
    else
    {FinalValue = 2 * Math.abs(Dual) + FieldA
    FinalValue}


    }

    else
    {(FieldC - 75) * 4 + FieldB * 2 + FieldA}

-1
投票

如果你有任何其他场景来测试它,那将是很棒的。

const fieldA = 20
const fieldB = 30
const fieldC = 40
let subtractor = 75

let fields = [fieldC, fieldB, fieldA]
let fieldTracker = 0

while (subtractor > 0) {
  if (fields[fieldTracker] === 0 && fieldTracker !== fields.length-1) fieldTracker+=1

  subtractor-=1
  fields[fieldTracker]-=1
}

console.log('remaining amount', Math.abs(fields.reduce((prev, current) => prev+current , 0)))
console.log('fields Array', fields)

以下是加入Function的逻辑。第一个参数是subtractor,然后其余的或参数是要减去的整数。

const getRemainder = (subtractor = 0, ...fields) => {
  let fieldTracker = 0

  while (subtractor > 0) {
    if (fields[fieldTracker] === 0 && fieldTracker !== fields.length-1) fieldTracker+=1

    subtractor-=1
    fields[fieldTracker]-=1
  }
  
  return Math.abs(fields.reduce((prev, current) => prev+current , 0))
}

const remainder = getRemainder(75, 40, 30, 20)
console.log(remainder)
© www.soinside.com 2019 - 2024. All rights reserved.