Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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_Typescript_Algorithm - Fatal编程技术网

Javascript 是否有一种算法用于合并具有相同键的对象数组的元素

Javascript 是否有一种算法用于合并具有相同键的对象数组的元素,javascript,arrays,typescript,algorithm,Javascript,Arrays,Typescript,Algorithm,我有以下数据,我一直在寻找一个算法的参考,该算法用于构建一个返回数组,该数组按字段(例如规程)分组,并推入所有唯一字段 初始数据集: [ { discipline: 1, originalBudgetDollars: 1114.96 }, { discipline: 2, originalBudgetDollars: 192 }, { discipline: 1, expendedDollars: 1137.24 }, { discip

我有以下数据,我一直在寻找一个算法的参考,该算法用于构建一个返回数组,该数组按字段(例如规程)分组,并推入所有唯一字段

初始数据集:

[      
      { discipline: 1, originalBudgetDollars: 1114.96 },
      { discipline: 2, originalBudgetDollars: 192 },
      { discipline: 1, expendedDollars: 1137.24 },
      { discipline: 2, expendedDollars: 55.08 },
      { discipline: 1, forecastAtCompletionDollars: 1276.62 },
      { discipline: 2, forecastAtCompletionDollars: 96 },
      { discipline: 1, earnedValueDollars: 81.6 },
      { discipline: 2, earnedValueDollars: 10636.6 }
]
预期结果:

[ 
      { discipline: 1, originalBudgetDollars: 1114.96, expendedDollars: 1137.24, remainingDollars: -22.28, forecastAtCompletionDollars: 1276.62, earnedValueDollars: 81.6 },
      { discipline: 2, originalBudgetDollars: 192, expendedDollars: 55.08,  remainingDollars: 136.92, forecastAtCompletionDollars: 96, earnedValueDollars: 10636.6 },
]

这个问题没有特定的算法,你可以做的是将这个问题分解成子问题并得到期望的结果。如果将来您要添加
规程:3
数据,那么下面的代码片段也会起作用,但对象中必须有
原始预算的美元
支出的美元
字段(以便我们可以计算
剩余美元

这里我用了

const数据=[
{学科:1,原始预算直径:1114.96},
{学科:2,原始预算:192},
{纪律:1,支出美元:1137.24},
{纪律:2,支出美元:55.08},
{学科:1,预测完成美元:1276.62},
{学科:2,预测完成美元:96},
{纪律:1,收益价值美元:81.6},
{纪律:2,收益价值美元:10636.6},
];
const obj=数据减少((acc,curr)=>{
常量{规程}=curr;
acc[规程]=对象.赋值(acc[规程]?{},curr);
返回acc;
}, {});
//仅获取对象的值
常量结果=对象值(obj);
//在所有对象中添加剩余美元
结果.forEach((obj)=>{
目标剩余美元=(
对象原始预算美元-对象支出美元
).toFixed(2);
});

控制台日志(结果)
您想在对象或数组中获得结果吗?
remainingDollars
从何而来?remainingDollars=originalBudgetDollars-ExpendedDollars原始数据是一个对象数组,希望得到相同的结果。感谢您的参考!