我最近使用Mixpanel的 Javascript查询语言来分析用户行为。我已经为下面提到的问题陈述提出了两种不同的查询变体,但似乎没有一个对我有效。我在下面发布了哪一个。任何人都可以建议我编写查询的正确方法,以获得所需的结果。
问题陈述:查找已执行过活动的用户的所有不同ID:#x; xyz"," abc" &安培; " DFG"
JSON格式的数据库(对于虚拟数据,实际数据库对于相同格式的数据要大得多):
[
{
"name": "xyz",
"distinct_id": "121"
},
{
"name": "abc",
"distinct_id": "345"
}
]
查询我写道:
function main() {
return Events({
from_date: "2017-06-26",
to_date: "2017-06-27"
})
.groupByUser(function(state, events) {
var flag_abc = false, flag_xyz = false, flag_dfg = false, count_unique = 0;
for (var i = 0; i < events.length - 1; i ++){
if (count_unique === 3){
state = true;
return state;
}
if (events[i].name === "abc" && !flag_abc ){
count_unique += 1;
flag_abc = true;
}
else if(events[i].name === "xyz" && !flag_xyz){
count_unique += 1;
flag_xyz = true;
}
else if(events[i].name === "dfg" && !flag_dfg){
count_unique += 1;
flag_dfg = true;
}
}
state = false;
return state;
})
.filter(function(arr){
if(arr.value === false)
return false;
else
return true;
})
}
答案 0 :(得分:0)
这段代码有局限性
for (var i = 0; i < events.length - 1; i ++){
if (count_unique === 3){
state = true;
return state;
}
if (events[i].name === "abc" && !flag_abc ){
count_unique += 1;
flag_abc = true;
}
else if(events[i].name === "xyz" && !flag_xyz){
count_unique += 1;
flag_xyz = true;
}
else if(events[i].name === "dfg" && !flag_dfg){
count_unique += 1;
flag_dfg = true;
}
}
您假设您的JSON只有2种不同的类型(xyz,abc)。 如果你有更多独特的名字怎么办?你必须每次都修改你的代码
更好的方法是
有一个全局变量并继续为其添加所有唯一名称。 例如:
var data = ["12", "14", "12", "11"];
console.log(jQuery.unique( data ));
gives : ["12", "14", "11"]
count_unique => will be size of array
flag_abc => check if in array abc exist