Arrays 查找对象类型脚本中某个值的出现次数

Arrays 查找对象类型脚本中某个值的出现次数,arrays,typescript,object,lodash,Arrays,Typescript,Object,Lodash,我有一个嵌套对象,我需要计算“status”字段的值为2和值为-1的次数。这就是我所拥有的。我也愿意使用lodash const数据={ “文件1”:{ “文件”:{ “路径”:“文件1” }, “loadedBytes”:1, “地位”:2, “错误”:空 }, “文件2”:{ “文件”:{ “路径”:“文件2” }, “loadedBytes”:1, “地位”:-1, “错误”:“发生意外错误-请重试。如果错误仍然存在,请与联系” }, “文件3”:{ “文件”:{ “路径”:“文件3”

我有一个嵌套对象,我需要计算“status”字段的值为2和值为-1的次数。这就是我所拥有的。我也愿意使用lodash

const数据={
“文件1”:{
“文件”:{
“路径”:“文件1”
},
“loadedBytes”:1,
“地位”:2,
“错误”:空
},
“文件2”:{
“文件”:{
“路径”:“文件2”
},
“loadedBytes”:1,
“地位”:-1,
“错误”:“发生意外错误-请重试。如果错误仍然存在,请与联系”
},
“文件3”:{
“文件”:{
“路径”:“文件3”
},
“loadedBytes”:1,
“地位”:2,
“错误”:空
},
“文件4”:{
“文件”:{
“路径”:“文件4”
},
“loadedBytes”:1,
“地位”:2,
“错误”:空
},
“文件5”:{
“文件”:{
“路径”:“文件5”
},
“loadedBytes”:1,
“地位”:-1,
“错误”:“出现意外错误-请重试。如果错误仍然存在,请与Trinity联系”
},
“文件6”:{
“文件”:{
“路径”:“文件6”
},
“loadedBytes”:1,
“地位”:1,
“错误”:”
},
“文件7”:{
“文件”:{
“路径”:“文件7”
},
“loadedBytes”:1,
“地位”:-1,
“错误”:“出现意外错误-请重试。如果错误仍然存在,请与Trinity联系”
},
“文件8”:{
“文件”:{
“路径”:“文件8”
},
“loadedBytes”:1,
“地位”:1,
“错误”:”
},
“文件9”:{
“文件”:{
“路径”:“文件9”
},
“loadedBytes”:1,
“地位”:-1,
“错误”:“出现意外错误-请重试。如果错误仍然存在,请与Trinity联系”
}
}
var countStatus=(status)=>Object.values(data).reduce(函数(n,i){
返回n+(i.status==status);
}, 0);
console.log({
countSuccess:countStatus(2),
countFailure:countStatus(-1)

})
通过使用一元加号将布尔表达式显式转换为数字,可以避免TypeScript给出的错误:

return n + +(i.status === status);

对于其余部分,您的解决方案很好。

通过使用一元加号将布尔表达式显式转换为数字,可以避免TypeScript给出的错误:

return n + +(i.status === status);

对于其余部分,您的解决方案很好。

您可以使用
\uuu.countBy()
获取一个包含所有状态计数的对象,然后通过分解对象()来获取所需的状态:

const data={“file1”:{“file”:{“path”:“file1”},“loadedBytes”:1,“status”:2,“error”:null},“file2”{“path”:“file2”},“loadedBytes”:1,“status”:-1,“error”:-1,“error”:“发生了意外错误-请重试。如果错误仍然存在,请联系“}”,file3:{“file”:{“path”:“file3”},“loadedBytes”:1,“status”:2,“error”:null},“file4”:“file”:“file”:“path”:“file4”:“file4”},“loadedBytes”:1,“状态”:2,“错误”:null},“文件5”:{“文件”:{“路径”:“文件5”},“loadedBytes”:1,“状态”:-1,“错误”:“出现意外错误-请重试。如果错误仍然存在,请联系Trinity”},“文件6”:{“文件”:{“路径”:“文件6”},“loadedBytes”:1,“状态”:“}”,“文件7”:{“文件”:{“路径”:“文件7”},“loadedBytes”:1,“状态”:-1,“错误”:“发生意外错误-请重试。如果错误仍然存在,请联系Trinity”},“文件8”:{“文件”:{“路径”:“文件8”},“加载字节”:1,“状态”:1,“错误”:“}”,“文件9”:{“文件”:{“路径”:“文件9”},“加载字节”:1,“状态”:-1,“错误”:“发生意外错误-请重试。如果错误仍然存在,请联系Trinity”}”
常量{'2':countSuccess,'-1':countFailure}={.countBy(数据,'status')
console.log({countSuccess,countFailure})

您可以使用
..countBy()
获取一个包含所有状态计数的对象,然后通过分解对象()来获取所需的状态:

const data={“file1”:{“file”:{“path”:“file1”},“loadedBytes”:1,“status”:2,“error”:null},“file2”{“file”:“path”:“file2”},“loadedBytes”:1,“status”:-1,“error”:-1,“error”:“发生了意外错误-请重试。如果错误仍然存在,请联系“}”,file3:{“file”:“{“path”:“file3”},“loadedBytes”:1,“status”:2,“error”:null},“file4”:“file”:“file”:“path”:“file4”:“file4”:“file4”{“file4”:“file4”“},“loadedBytes”:1,“status”:2,“error”:null},“file5”:{“file”:{“path”:“file5”},“loadedBytes”:1,“status”:-1,“error”:“发生了意外错误-请重试。如果错误仍然存在,请联系Trinity”},“file6”:{“file”:{“path”:“file6”},“loadedBytes”:1,“status”:“}”,file7:{“file”:{“path”:“file7”},“loadedBytes”:1,“status”:-1,“error“发生意外错误-请重试。如果错误仍然存在,请联系Trinity”},“文件8”:{“文件”:{“路径”:“文件8”},“加载字节”:1,“状态”:1,“错误”:“}”,“文件9”:{“文件”:{“路径”:“文件9”},“加载字节”:1,“状态”:-1,“错误”:“发生意外错误-请重试。如果错误仍然存在,请联系Trinity”}”
常量{'2':countSuccess,'-1':countFailure}={.countBy(数据,'status')
console.log({countSuccess,countFailure})

将OP更新为接收状态值的函数,相应地更新了我的答案。将OP更新为接收状态值的函数,相应地更新了我的答案。