[英]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.