我正在编写一个接收以下json的云函数
{
"data":{
"preference1" : "Food",
"preference2" : "Travel",
"preference3" : "Fashion"
}
用户从10个首选项列表中选择了前3个首选项,我想实现计数器,这样我就可以跟踪选择最多的那个。
我正在考虑以这样的方式来实现计数器:我将声明变量,然后执行一系列if语句来添加+1(如果它与字符串匹配)。
var food = 0
var travel = 0
var fashion = 0
if (data.preference1 == 'Food') {
var food = 1
}
if (data.preference1 == 'Travel') {
var travel = 1
}
... 等等。
最终做...
countDoc.ref.update({
food_count: countDoc.ref.data().food_count + food,
travel_count: countDoc.ref.data().travel_count + travel,
fashion_count: countDoc.ref.data().fashion_count + fashion
})
这将使我获得理想的结果,但是我知道必须有一种更干净的方法来做到这一点。我不知道确切如何搜索此问题或尝试哪种方法。
如果我能指出正确的方向,那就太好了。
谢谢。
最佳答案
您可以使用地图:
const map = new Map()
// For each data item
Object.values(data).forEach((preference) => {
const count = (map.get(preference) || 0) + 1
map.set(preference, count)
})
假设您有一组数据项:
const items = [
{
preference1: 'Food',
preference2: 'Travel',
preference3: 'Fashion',
},
{
preference1: 'Something',
preference2: 'Travel',
preference3: 'Fashion',
},
{
preference1: 'Food',
preference2: 'Something Else',
preference3: 'Fashion',
},
]
const map = new Map()
// For each data item
items.forEach((item) => {
Object.values(item).forEach((preference) => {
const count = (map.get(preference) || 0) + 1
map.set(preference, count)
})
})
console.log(map)
输出:
Map {
'Food' => 2,
'Travel' => 2,
'Fashion' => 3,
'Something' => 1,
'Something Else' => 1 }