Javascript 计算某个键的值在JSON中出现的次数
我的JSON文件中有一个数组,如下所示:Javascript 计算某个键的值在JSON中出现的次数,javascript,arrays,json,key-value,key-value-coding,Javascript,Arrays,Json,Key Value,Key Value Coding,我的JSON文件中有一个数组,如下所示: { "commands": [ { "user": "Rusty", "user_id": "83738373", "command_name": "TestCommand", "command_reply": "TestReply" } ] } 等等。我想将某个用户(由user\u id识别)的命令数量限制为3个命令。我知道我需要从循环遍历每个对象开始,但仍停留在如何完成这一部分上。您可以使用
{
"commands": [
{
"user": "Rusty",
"user_id": "83738373",
"command_name": "TestCommand",
"command_reply": "TestReply"
}
]
}
等等。我想将某个用户(由
user\u id
识别)的命令数量限制为3个命令。我知道我需要从循环遍历每个对象开始,但仍停留在如何完成这一部分上。您可以使用阵列原型上的方法来实现这一点。其思想是遍历commands数组并生成userid的键/值对以及该用户执行的命令数。结构如下所示:
{“83738373”:3,“83738334”:2}
然后,您可以对照userCommandCounts
进行检查,以确定用户是否可以执行另一个命令
var数据={
“命令”:[{
“用户”:“生锈”,
“用户id”:“83738373”,
“命令名称”:“TestCommand”,
“命令_reply”:“TestReply”
},
{
“用户”:“吉尔”,
“用户id”:“83738334”,
“命令名称”:“TestCommand”,
“命令_reply”:“TestReply”
},
{
“用户”:“生锈”,
“用户id”:“83738373”,
“命令名称”:“TestCommand”,
“命令_reply”:“TestReply”
},
{
“用户”:“生锈”,
“用户id”:“83738373”,
“命令名称”:“TestCommand”,
“命令_reply”:“TestReply”
},
{
“用户”:“吉尔”,
“用户id”:“83738334”,
“命令名称”:“TestCommand”,
“命令_reply”:“TestReply”
},
]
};
var userCommandCounts=data.commands.reduce(函数(结果,当前){
如果(!result[当前[“用户id”]]){
结果[当前[“用户id”]]=0;
}
结果[当前[“用户id”]++;
返回结果;
}, {});
函数canUserExecute(userId){
return!userCommandCounts[userId]| | userCommandCounts[userId]<3;
}
log(canUserExecute(“83738373”);
log(canUserExecute(“83738334”);
log(canUserExecute(“23412342”)代码>您可以使用阵列原型上的方法来完成此操作。其思想是遍历commands数组并生成userid的键/值对以及该用户执行的命令数。结构如下所示:
{“83738373”:3,“83738334”:2}
然后,您可以对照userCommandCounts
进行检查,以确定用户是否可以执行另一个命令
var数据={
“命令”:[{
“用户”:“生锈”,
“用户id”:“83738373”,
“命令名称”:“TestCommand”,
“命令_reply”:“TestReply”
},
{
“用户”:“吉尔”,
“用户id”:“83738334”,
“命令名称”:“TestCommand”,
“命令_reply”:“TestReply”
},
{
“用户”:“生锈”,
“用户id”:“83738373”,
“命令名称”:“TestCommand”,
“命令_reply”:“TestReply”
},
{
“用户”:“生锈”,
“用户id”:“83738373”,
“命令名称”:“TestCommand”,
“命令_reply”:“TestReply”
},
{
“用户”:“吉尔”,
“用户id”:“83738334”,
“命令名称”:“TestCommand”,
“命令_reply”:“TestReply”
},
]
};
var userCommandCounts=data.commands.reduce(函数(结果,当前){
如果(!result[当前[“用户id”]]){
结果[当前[“用户id”]]=0;
}
结果[当前[“用户id”]++;
返回结果;
}, {});
函数canUserExecute(userId){
return!userCommandCounts[userId]| | userCommandCounts[userId]<3;
}
log(canUserExecute(“83738373”);
log(canUserExecute(“83738334”);
log(canUserExecute(“23412342”)代码>那么你计数并忽略?你的标题和问题文本并不匹配。得到一个计数是由一个。如果您想获得具有特定用户ID的命令,请参见。@MikeMcCaughan我同意您的看法,您链接的两篇文章可以回答这个问题,但我不会说标题和问题不匹配。根据标题,OP希望计算对象数组中特定属性的特定值出现的次数。我不认为问题正文中的任何内容表明了其他方面。@mhodges“我想限制命令的数量……限制为3个命令。”暗指我们不了解的其他要求,这些要求应该会影响最终答案。例如,正如epascarello在第一条评论中所建议的那样,OP可能希望获得前3条命令而忽略其余命令。也许他们想按用户id分组并获得计数,这一点您已经演示过了(在整个站点的许多其他答案中也演示过)。基本上,我们不知道,因为OP没有回应。@MikeMcCaughan啊,没错。我不是那样读的,但我完全明白你现在在说什么。所以你计数并忽略?你的标题和问题文本并不匹配。得到一个计数是由一个。如果您想获得具有特定用户ID的命令,请参见。@MikeMcCaughan我同意您的看法,您链接的两篇文章可以回答这个问题,但我不会说标题和问题不匹配。根据标题,OP希望计算对象数组中特定属性的特定值出现的次数。我不认为问题正文中的任何内容表明了其他方面。@mhodges“我想限制命令的数量……限制为3个命令。”暗指我们不了解的其他要求,这些要求应该会影响最终答案。例如,正如epascarello在第一条评论中所建议的那样,OP可能希望获得前3条命令而忽略其余命令。也许他们想按用户id分组并获得计数,这一点您已经演示过了(在整个站点的许多其他答案中也演示过)。基本上,我们不知道,因为OP没有回应。@MikeMcCaughan啊,没错。我不是那样读的,但我完全明白你现在在说什么。