简体   繁体   English

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

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

I have a array of object and I need to get the result based on few condition.我有一个对象数组,我需要根据几个条件获得结果。 if Object.Keys() matches and type is integer, return average of those values.如果 Object.Keys() 匹配且类型为整数,则返回这些值的平均值。 if Object.keys() matches and type is string, return value with how many times it has appeared.如果 Object.keys() 匹配且类型为字符串,则返回出现次数的值。

I have added the expectedResult at the bottom, have tried some methods but finding it hard to get the desired result.我在底部添加了 expectedResult,尝试了一些方法,但发现很难得到想要的结果。

looking forward to some helpful answers.期待一些有用的答案。 thx谢谢

 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