为了账号安全,请及时绑定邮箱和手机立即绑定

如何根据匹配的对象键获取平均值

如何根据匹配的对象键获取平均值

斯蒂芬大帝 2023-03-03 10:13:48
我有一个对象数组,我需要根据几个条件获得结果。如果 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)"}}]
查看完整描述

1 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

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)


查看完整回答
反对 回复 2023-03-03
  • 1 回答
  • 0 关注
  • 124 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信