我有下面的对象数组,其中存储了计划编号
const initialObj = [
{
index: 9417,
schudule_number: '11010'
},
{
index: 8427,
schudule_number: '11020'
}
];
这是我需要的预期输出:
const finalOutput = [
{
index: 9417,
schudule_number: '11010',
adjustedAmount: [ {key:"Labour Cost",value:11},{key:"Material Cost",value:0} ]
},
{
index: 8427,
schudule_number: '11020',
adjustedAmount: [ {key:"Labour Cost",value:6},{key:"Material Cost",value:2} ]
}
];
下面是对象的adjustedAmount数组,我使用它来计算每个值的和:
const amount = [{
adjustedAmount: '[{"key":"Labour Cost","value":1},{"key":"Material Cost","value":0}]',
schudule_number: '11010'
},
{
adjustedAmount: '[{"key":"Labour Cost","value":10},{"key":"Material Cost","value":0}]',
schudule_number: '11010'
},
{
adjustedAmount: '[{"key":"Labour Cost","value":1},{"key":"Material Cost","value":0}]',
schudule_number: '11020'
},
{
adjustedAmount: '[{"key":"Labour Cost","value":5},{"key":"Material Cost","value":2}]',
schudule_number: '11020'
}
];
用于计算每个值之和的代码,但它不比较计划编号
const sumResults =
Object.entries(amount)
.map(x => JSON.parse(x.adjustedAmount))
.flatMap(x => [...x])
.reduce((acc, curr) => {
if (acc[curr.key]) {
acc[curr.key] += curr.value;
} else {
acc[curr.key] = curr.value;
}
return acc;
}, {}))
.map(([key, value]) => ({
key,
value
}));
最后合并对象数组
initialObj.forEach(va => {
va["adjustedAmount"] = sumResults;
});
我如何比较计划编号并插入initialObj?
如果首先构建amount
数据的简单映射:
const amountMap = amount.reduce((acc, a) => {
const item = acc[a.schudule_number];
const obj = JSON.parse(a.adjustedAmount).reduce( (obj,i) => ({...obj, [i.key]:i.value}),{});
if(item){
Object.entries(obj).forEach( ([k,v]) => item[k] += v);
}
else{
acc[a.schudule_number] = obj;
}
return acc;
},{});
那么将其引入finaloutput
的代码非常简单:
const finalOutput = initialObj.map(o => ({
...o,
adjustedAmount: Object.entries(amountMap[o.schudule_number]).map( ([k,v]) => ({key:k,value:v}))
}))
以下实时示例:
null
const initialObj = [
{
index: 9417,
schudule_number: '11010'
},
{
index: 8427,
schudule_number: '11020'
}
];
const amount = [{
adjustedAmount: '[{"key":"Labour Cost","value":1},{"key":"Material Cost","value":0}]',
schudule_number: '11010'
},
{
adjustedAmount: '[{"key":"Labour Cost","value":10},{"key":"Material Cost","value":0}]',
schudule_number: '11010'
},
{
adjustedAmount: '[{"key":"Labour Cost","value":1},{"key":"Material Cost","value":0}]',
schudule_number: '11020'
},
{
adjustedAmount: '[{"key":"Labour Cost","value":5},{"key":"Material Cost","value":2}]',
schudule_number: '11020'
}
]
const amountMap = amount.reduce((acc, a) => {
const item = acc[a.schudule_number];
const obj = JSON.parse(a.adjustedAmount).reduce( (obj,i) => ({...obj, [i.key]:i.value}),{});
if(item){
Object.entries(obj).forEach( ([k,v]) => item[k] += v);
}
else{
acc[a.schudule_number] = obj;
}
return acc;
},{});
const finalOutput = initialObj.map(o => ({
...o,
adjustedAmount: Object.entries(amountMap[o.schudule_number]).map( ([k,v]) => ({key:k,value:v}))
}))
console.log(finalOutput);
问题内容: 我希望能够使LinkedList.contains()对于自定义比较器返回true。 假设我有1个LinkedList和2个对象 从技术上讲,两个对象在比较方面是相同的(MyObject实现Comparable) (a == b)==真 但是,当我执行以下操作时,myList对于myList.contains(b)不会返回true 我认为它是因为contains将检查对象引用,并看到a
问题内容: 在JavaScript中比较对象的最佳方法是什么? 例: 我知道如果 两个对象引用的是完全相同的对象 , 则它们相等 ,但是有没有办法检查它们是否具有相同的属性值? 以下方法对我有用,但这是唯一的可能性吗? 问题答案: 不幸的是,除非您递归使用并访问所有不可枚举的属性,否则没有完美的方法,但这仅在Firefox中有效。 因此,我能做的最好是猜测使用情况。 1)快速且有限。 当您具有简单
问题内容: 可以对Angular中的两个对象进行“深度”比较吗?我想做的是比较每个键/值对。例如: 对象1 对象2 我需要的是比较失败,因为只有一对键/值对是不同的。换句话说,所有键/值对必须完全匹配,否则将失败。这是Angular中已经内置的东西吗?我确信如果确实需要,我可以编写自己的服务,但我希望它已经内置。类似于angular.equals。 问题答案: 要比较两个对象,可以使用: 它进行了
本文向大家介绍基于java中cookie和session的比较,包括了基于java中cookie和session的比较的使用技巧和注意事项,需要的朋友参考一下 cookie和session的比较 一、对于cookie: ①cookie是创建于服务器端 ②cookie保存在浏览器端 ③cookie的生命周期可以通过cookie.setMaxAge(2000);来设置,如果没有设置setMaxAge,
问题内容: 我得到的错误就在这行 。 该怎么办?其他逻辑还可以吗? 我想做的是有一个A列表和一个B列表,其中一个属性与id相同;尽管变量名不同。即在和在B。现在我将两个列表都放在ListAll中,并在相同的变量id / bid上对它们进行排序。我有A和B实现可比性。 和我的listAll是对象类型? 我该怎么做?谢谢。 问题答案: 您可以添加一个通用基类并在那里进行比较,如下所示:
我正在尝试创建一个二进制搜索程序,该程序可以使用各种类型的变量(int、float、string等)来查看数组中是否存在元素。我正试图找出如何比较变量。下面是我正在使用的内容的草图: 我甚至不确定使用对象是否是最好的方法。