繁体   English   中英

我如何将每个 object 的属性加起来用于单独的 object arrays?

[英]How could I sum a property of each object for separate object arrays?

我有一个 object,其中有一个对象,每个对象都有一个包含 0..n 个对象的对象数组。 主要的 object 看起来像这样:

{
    obj1: [{obj1.1}, {obj1.2}, {obj1.3}],
    obj2: [{obj2.1}]
    obj3: [{obj3.1}, {obj3.2}]
}

每个 object(obj1、obj2 和 obj3)在对象数组中包含一组公共对象。 例如,obj1 在 object 数组(obj1.1、obj1.2 和 obj1.3)中有一组对象,所有这些对象都具有将它们组合在一起的共同属性。

我现在希望能够在每个 object 数组中分别迭代每个 object,以便对每个 object 数组的特定属性(每个 object 具有的属性)求和。

我已经使用Object.keys遍历每个 object 数组,尽管我仍然无法获得每个 object 数组的单独求和值。

例如:

{
    obj1: [
       0: { price: 10 }
       1: { price: 10 }
       2: { price: 10 }
    ],
    obj2: [
       0: { price: 10 }
    ],
    obj3: [
       0: { price: 10 }
       1: { price: 10 }
    ]
}

我希望能够对每个 object 数组的房产price求和。 因此,对于obj1 ,我的总金额应该为 30。对于obj2 ,我的总金额应该为 10,最后对于obj3 ,我的总金额应该为 20。

我可以使用Object.keys遍历每个 object 数组,但是就目前而言,当遍历每个 object 数组中的每个单独元素时(使用 foreach),我只是对所有三个 object arrays 中所有对象的最终数量求和。即我得到的总金额为 60。

var total = 0;
for (var key of Object.keys(result)) {
    result[key].forEach(element => {
        total += element.Price;
    });
};
console.log(total);

我可以使用什么来获取每个 object 数组的三个单独总和金额?

function sum(prices)
{
  let total = 0;
  prices.forEach((entry) => total += entry.price);
  return total;
}

console.log(sum(obj1));
console.log(sum(obj2));
console.log(sum(obj3));

怎么又这么难了? 您拥有正确的代码,只需要将其分解即可。

 const data = { obj1: [ { price: 10 }, { price: 10 }, { price: 10 } ], obj2: [ { price: 10 } ], obj3: [ { price: 10 }, { price: 10 } ] }; const res = Object.entries(data).reduce((totalMap, [key, arr]) => ({...totalMap, [key]: arr.reduce((total, { price }) => total + price, 0) }), {}); console.log(res);

还有另一种将结果作为数组获取的方法:

 let obj={obj1:[{price:10},{price:10},{price:10}],obj2:[{price:10}],obj3:[{price:10},{price:10}]}; let result = Object.entries(obj).map(([k,v]) => ( {[k]:v.reduce((acc,e) => acc+=e.price,0)} ) ) console.log(result)

您可以将任务分开,一个用于获取某个键的总值,另一个用于迭代 object 的键。

 const getTotal = (array, key) => array.reduce((t, o) => t + o[key], 0), data = { obj1: [{ price: 10 }, { price: 10 }, { price: 10 }], obj2: [{ price: 10 }], obj3: [{ price: 10 }, { price: 10 }] }, result = {}; for (const key in data) result[key] = getTotal(data[key], 'price'); console.log(result);

您可以 map 超过Object.entries ,使用Array#reduce获取每个数组的总和,然后使用Object.fromEntries获取 object 结果。

 const obj={obj1:[{price:10},{price:10},{price:10}],obj2:[{price:10}],obj3:[{price:10},{price:10}]}; let res = Object.fromEntries(Object.entries(obj).map(([k, v])=> [k, v.reduce((a,b)=>a+b.price,0)])); console.log(res);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM