遍历对象数组并输出自定义对象 [英] Iterate through an Array of Objects and output custom object

查看:112
本文介绍了遍历对象数组并输出自定义对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要从Typescript中的对象数组中构建自定义对象。

I am needing to build a custom object from an array of objects in Typescript.

在下面的示例中,我如何计算salesman_1_name是多少次在数组中,为每个Salesman_1_name添加毛额,并计算每个Salesman_1_name的保修是否不为null?因此,如果我有:

In the giving example below, How do I count how many times the salesman_1_name is in the Array, Add the gross for each Salesman_1_name, and count if warranty is not null for each salesman_1_name? So if I have:

[
    {salesman_1_name:Brian, gross:100, warranty: Easycare},
    {salesman_1_name:Brian, gross:100, warranty: Easycare},
    {salesman_1_name:Brian, gross:100, warranty: null},
    {salesman_1_name:Kreso, gross:100, warranty: null},
    {salesman_1_name:Filip, gross:100, warranty: Easycare}
]

我需要输出:

[
    Name:Brian, Count:3, Gross:300, WarrantyCount:2, 
    Name:Kreso, Count:1, Gross:100, WarrantyCount:0, 
    Name:Filip, Count:1, Gross:100, WarrantyCount:1
]


推荐答案

您可以使用对象作为对具有以下名称的组的引用并进行汇总。

You could use an object as reference to the group with the name and make your aggregation.

var data = [{ salesman_1_name: 'Brian', gross: 100, warranty: 'Easycare' }, { salesman_1_name: 'Brian', gross: 100, warranty: 'Easycare' }, { salesman_1_name: 'Brian', gross: 100, warranty: null }, { salesman_1_name: 'Kreso', gross: 100, warranty: null }, { salesman_1_name: 'Filip', gross: 100, warranty: 'Easycare' }],
    grouped = [];

data.forEach(function (a) {
    if (!this[a.salesman_1_name]) {
        this[a.salesman_1_name] = { Name: a.salesman_1_name, Count: 0, Gross: 0, WarrantyCount: 0 };
        grouped.push(this[a.salesman_1_name]);
    }
    this[a.salesman_1_name].Count++;
    this[a.salesman_1_name].Gross += a.gross;
    a.warranty !== null && this[a.salesman_1_name].WarrantyCount++;    
}, Object.create(null));

console.log(grouped);

.as-console-wrapper { max-height: 100% !important; top: 0; }

这篇关于遍历对象数组并输出自定义对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆