繁体   English   中英

如何根据匹配的对象键获得平均值 [代码]

[英]how to get average of values based on matcching object keys [code]

我有一个对象数组,我需要根据几个条件获得结果。 如果 Object.Keys() 匹配且类型为整数,则返回这些值的平均值。 如果 Object.keys() 匹配且类型为字符串,则返回出现次数的值。

我在底部添加了 expectedResult,尝试了一些方法,但发现很难得到想要的结果。

期待一些有用的答案。 谢谢

 let data = [{ baySize: {type: "integer", value: "180"}, bayAge: {type: "integer", value: "20"}, totalBays: {type: "integer", value: "30"}, bayType: {type: "string", value: "Brown"}, sprayed: {type: "boolean", value: "No"} }, { baySize: {type: "integer", value: "120"}, bayAge: {type: "integer", value: "30"}, totalBays: {type: "integer", value: "30"}, bayType: {type: "string", value: "Grey"}, sprayed: {type: "boolean", value: "No"} }] const result = data.map((item) => { const intType = Object.keys(item).map((values) => { return item[values].type == "integer" ? item[values].value : 0 }) const stringType = Object.keys(item).map((values) => { return item[values].type == "string" ? item[values].value : 0 }) console.log(intType) console.log(stringType) }) let expectedResult = [{ baySize: {type: "integer", value: "300"}, bayAge: {type: "integer", value: "50"}, totalBays: {type: "integer", value: "60"}, bayType: {type: "string", value: "brown (1), Grey(1)"} }]

let data = [{
        baySize: {
            type: "integer",
            value: "180"
        },
        bayAge: {
            type: "integer",
            value: "20"
        },
        totalBays: {
            type: "integer",
            value: "30"
        },
        bayType: {
            type: "string",
            value: "Brown"
        },
        sprayed: {
            type: "boolean",
            value: "No"
        }
    },
    {
        baySize: {
            type: "integer",
            value: "120"
        },
        bayAge: {
            type: "integer",
            value: "30"
        },
        totalBays: {
            type: "integer",
            value: "30"
        },
        bayType: {
            type: "string",
            value: "Grey"
        },
        sprayed: {
            type: "boolean",
            value: "No"
        }
    }
]
const intResult = {}
const strResult = {}
data.forEach(item => {
    Object.keys(item).forEach(key => {
        const innerItem = item[key]
        if (innerItem.type === 'integer') {
            if (!intResult.hasOwnProperty(key)) {
                intResult[key] = {
                    count: 1,
                    value: +innerItem.value
                }
            } else {
                intResult[key].count++
                intResult[key].value += (+innerItem.value)
            }
        } else {
            if (!strResult.hasOwnProperty(key)) {
                strResult[key] = {}
            }
            if (!strResult[key].hasOwnProperty(innerItem.value)) {
                strResult[key][innerItem.value] = 1
            } else {
                strResult[key][innerItem.value]++
            }

        }
    })
})
const resultObj = {}
Object.keys(intResult).forEach(key => {
    resultObj[key] = {
        type: 'integer',
        value: intResult[key].value / intResult[key].count + ''
    }
})

Object.keys(strResult).forEach(key => {
    let value = ''
    Object.keys(strResult[key]).forEach(subKey => {
        value += `${subKey}(${strResult[key][subKey]})`
    })
    resultObj[key] = {
        type: 'string',
        value
    }
})
console.log(resultObj)

暂无
暂无

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

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