繁体   English   中英

从 2 个对象数组中过滤和求和数据到 JS 中的新数组

[英]filter and sum data from 2 array of objects to a new array in JS

我有 2 个 JavaScript 对象的 arrays :

const typeCrop = [
    { id: 1, name: 'apple' },
    { id: 2, name: 'pineapple' },
    { id: 3, name: 'orange' },
    { id: 4, name: 'berry' },
]

const lands = [
    { landOwnerId: 6, landId: 1, landTypeID: 1, area: 3800 },
    { landOwnerId: 1, landId: 3, landTypeID: 4, area: 6500 },
    { landOwnerId: 5, landId: 3, landTypeID: 2, area: 9000 },
    { landOwnerId: 2, landId: 2, landTypeID: 3, area: 6600 },
    { landOwnerId: 3, landId: 1, landTypeID: 1, area: 980 },
    { landOwnerId: 5, landId: 2, landTypeID: 2, area: 5900 },
    { landOwnerId: 3, landId: 3, landTypeID: 2, area: 1080 },
    { landOwnerId: 2, landId: 3, landTypeID: 3, area: 2220 },
    { landOwnerId: 4, landId: 3, landTypeID: 4, area: 5700 },
    { landOwnerId: 2, landId: 3, landTypeID: 3, area: 8700 },
    { landOwnerId: 3, landId: 2, landTypeID: 2, area: 910 },
    { landOwnerId: 3, landId: 1, landTypeID: 1, area: 1770 },
    { landOwnerId: 2, landId: 2, landTypeID: 2, area: 9860 }
];

我是一名新程序员,需要根据每个作物的面积总和,制作一个数组,其中作物类型的名称从大到小排序。

在“lands”数组中,我尝试按 landTypeID 排序并对区域求和,然后获取 landTypeID 并使其与“typeCrop”数组中的 id 匹配,并将作物类型的名称添加到我的新数组中

如果面积总和:苹果总面积100,菠萝总面积50,橙子总面积70,浆果总面积80

预期结果: [apple, berry, orange,pineapple]

-o-

我列出了土地所有者的税号,但无法获得按作物类型对土地进行分类的数据

function listIDLandOwnerByName() {
    landOwners.sort(function(a, b) {
        if (a.name < b.name)
            return -1;
        if (a.name > b.name)
            return 1;
        return 0;
    })
    return landOwners.map((landOwner) => landOwner.taxNumber);
};
console.log(listIDLandOwnerByName());


这是一个经典的map-reduce问题,所以我使用了相同的方法。 最后,我进行了自定义排序比较。

 const typeCrop = [ { id: 1, name: 'apple' }, { id: 2, name: 'pineapple' }, { id: 3, name: 'orange' }, { id: 4, name: 'berry' }, ] const lands = [ { landOwnerId: 6, landId: 1, landTypeID: 1, area: 3800 }, { landOwnerId: 1, landId: 3, landTypeID: 4, area: 6500 }, { landOwnerId: 5, landId: 3, landTypeID: 2, area: 9000 }, { landOwnerId: 2, landId: 2, landTypeID: 3, area: 6600 }, { landOwnerId: 3, landId: 1, landTypeID: 1, area: 980 }, { landOwnerId: 5, landId: 2, landTypeID: 2, area: 5900 }, { landOwnerId: 3, landId: 3, landTypeID: 2, area: 1080 }, { landOwnerId: 2, landId: 3, landTypeID: 3, area: 2220 }, { landOwnerId: 4, landId: 3, landTypeID: 4, area: 5700 }, { landOwnerId: 2, landId: 3, landTypeID: 3, area: 8700 }, { landOwnerId: 3, landId: 2, landTypeID: 2, area: 910 }, { landOwnerId: 3, landId: 1, landTypeID: 1, area: 1770 }, { landOwnerId: 2, landId: 2, landTypeID: 2, area: 9860 } ]; const groupByCrop=typeCrop.map(c=>( {name:c.name,totalArea:lands.reduce((prev,curr)=>curr.landTypeID===c.id?prev+curr.area:prev,0)} )) const cropsSorted=groupByCrop.sort((a,b)=>a.totalArea>b.totalArea?1:-1).map(crop=>crop.name); console.log(cropsSorted);

暂无
暂无

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

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