我在我公司的专有软件中工作,我发现我可以实现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,因为我操纵这些单独的字段值有更深层的含义。
有人知道如何实现这个吗?即使只是指着一个函数,我也可以自己阅读它。
谢谢你的时间!
我猜你不是真的只做减法,因为你指出这个算法与(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);
我是一个新手,所以这可能没有意义。以下是我到达的内容,看起来效果很好。我的团队和我一直未能在测试中发现任何问题。
我非常感谢大家提供的帮助。对我来说,最重要的是学习我可以在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}
如果你有任何其他场景来测试它,那将是很棒的。
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)