Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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
Reactjs 我如何调整公式以持续自动填充缺少的参数?_Reactjs_Typescript_Algorithm - Fatal编程技术网

Reactjs 我如何调整公式以持续自动填充缺少的参数?

Reactjs 我如何调整公式以持续自动填充缺少的参数?,reactjs,typescript,algorithm,Reactjs,Typescript,Algorithm,因此,我正在构建一个计算器/估计器,它基本上只是这个保证金计算器的一个更复杂版本: 所以这里有一个边缘案例,我现在正试图解决 由于外包数据,我的成本分为三部分-人工、材料和人工和材料。LaborAndMaterial是人工和材料的总和,但它可能是唯一已知的成本因素,因此将其分为三部分 这就是问题所在。假设我们知道laborAndMaterial设置为100,laborAndMaterial设置为0 cost: { labor: 0, material: 0, laborAndMate

因此,我正在构建一个计算器/估计器,它基本上只是这个保证金计算器的一个更复杂版本:

所以这里有一个边缘案例,我现在正试图解决

由于外包数据,我的成本分为三部分-人工、材料和人工和材料。LaborAndMaterial是人工和材料的总和,但它可能是唯一已知的成本因素,因此将其分为三部分

这就是问题所在。假设我们知道laborAndMaterial设置为100,laborAndMaterial设置为0

cost: {
  labor: 0,
  material: 0,
  laborAndMaterial: 100
}
然后用户输入50进行人工。因为人工和材料是100,人工现在是50,我们可以自动填充材料到50

但是,当用户输入“50”时,它会自动将材质填充到95,因为用户在50中输入5。然后,当他们输入“0”时,将laborAndMaterial设置为145(50+95)。但在这个例子中,我需要调整自动填充材质的方式,以便在用户输入更多数字时继续更新(人工=5->50->506)(材质=95,50,-406)。到目前为止,我的公式基本上是这样运行的:

if(key === "cogs.labor") {
  if(laborAndMaterial > 0) {
    params["cogs.material"] = laborAndMaterial - value // value is what was entered
  }
}
但我仍然需要考虑另一个边缘原因,即当输入劳动力和材料时,它会更新laborAndMaterial值

cost {
  labor: 50,
  material: 50,
  laborAndMaterial: 100
}
所以,如果有人输入100人工,我们知道材料是50,我们可以自动填充人工和材料到150

所以我有点像:

if(material > 0) {
  params["cogs.laborAndMaterial"] = material + value // value is what was entered
}
你知道我如何调整我的公式来决定自动填充并继续更新参数,同时仍然允许多个边缘情况吗


omnicalculator的保证金计算器是一个很好的例子,因为他们解决了这个问题,但我对此感到困惑已有一段时间了。

我认为您需要在laborAndMaterial字段上实施一个条件

检查条件:-

if(labor > 0 && material > 0){
    let laborAndMaterial = labor + material;
}
然后将laborAndMaterial变量值设置到字段中


我认为这会对你有所帮助。

我认为你需要在你的劳动力和材料领域实施一个条件

检查条件:-

if(labor > 0 && material > 0){
    let laborAndMaterial = labor + material;
}
然后将laborAndMaterial变量值设置到字段中


我认为这可能会对您有所帮助。

我认为您基本上需要区分哪些成本中心被视为输入,哪些被视为输出。因此,当您开始时,您所提供的每一条数据都将被输入,而用于自动填充表单其余部分的数据将被输出

当用户输入时,他们提供的任何信息都将被视为输入数据。假设可以使用任意两个值来计算第三个值,那么一次只能将其中两个字段视为输入

下面是一个代码示例,了解我的意思:

//这是一个用于容纳两个输入成本中心的队列
常量输入字段=[];
//确定我们需要计算的单数
函数getVariableCostCenter(){
如果(!inputFields.includes('labor')){
返回“劳动”;
}
如果(!inputFields.includes('material')){
返回“材料”;
}
返回“laborAndMaterial”;
}
功能计算成本中心(成本中心){
常量variableCostCenter=getVariableCostCenter();
如果(variableCostCenter===‘人工’){
返回{
…成本中心,
人工:成本中心.laborAndMaterial-成本中心.material,
};
}
如果(variableCostCenter==='material'){
返回{
…成本中心,
物料:成本中心.laborAndMaterial-成本中心.laboral,
};
}
返回{
…成本中心,
laborAndMaterial:costCenters.labor+costCenters.material,
};
}
函数初始化成本中心(成本中心){
//首先,我们先确定哪些字段是已知的
如果(costCenters.labor>0){
push('labor');
}
如果(costCenters.material>0){
push('material');
}
if(costCenters.laborAndMaterial>0&&inputFields.length<2){
push('laborAndMaterial');
}
//…然后执行您通常执行的任何操作来填充表单
}
函数更新成本中心(以前的成本中心){
//更新输入字段,以便用户的输入
//始终被视为两个输入字段之一
如果(!inputFields.includes(键)){
inputFields.shift();
push(字段);
}
常数成本中心=计算成本中心({
…以前的成本中心,
[键]:值,
});
params['cogs.labor']=costCenters.labor;
参数['cogs.material']=costCenters.material;
参数['cogs.laborAndMaterial']=成本中心.laborAndMaterial;
}

我认为您基本上需要区分哪些成本中心被视为输入,哪些被视为输出。因此,当您开始时,您所提供的每一条数据都将被输入,而用于自动填充表单其余部分的数据将被输出

当用户输入时,他们提供的任何信息都将被视为输入数据。假设可以使用任意两个值来计算第三个值,那么一次只能将其中两个字段视为输入

下面是一个代码示例,了解我的意思:

//这是一个用于容纳两个输入成本中心的队列
常量输入字段=[];
//确定我们需要计算的单数
函数getVariableCostCenter(){
如果(!inputFields.includes('labor')){
返回“劳动”;
}
如果(!inputFields.includes('material')){
返回“材料”;
}
返回“laborAndMaterial”;
}
功能计算成本中心(成本中心){
常量variableCostCenter=getVariableCostCenter();
如果(variableCostCenter===‘人工’){
返回{
…成本中心,
人工:成本中心.laborAndMaterial-成本中心.material,
};
}
如果(variableCostCenter==='material'){
返回{
…成本中心,
物料:成本中心.laborAndMaterial-成本中心.laboral,
};
}
返回{