Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 计算某个键的值在JSON中出现的次数_Javascript_Arrays_Json_Key Value_Key Value Coding - Fatal编程技术网

Javascript 计算某个键的值在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个命令。我知道我需要从循环遍历每个对象开始,但仍停留在如何完成这一部分上。您可以使用

我的JSON文件中有一个数组,如下所示:

{
 "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啊,没错。我不是那样读的,但我完全明白你现在在说什么。