如何在JavaScript中计算对象数组中的某些元素?
我试图计算这个JSON文件中每个元素的出现次数如何在JavaScript中计算对象数组中的某些元素?,javascript,arrays,json,Javascript,Arrays,Json,我试图计算这个JSON文件中每个元素的出现次数 [ { "firstName": "Sena", "lastName": "Turan", "age": 19, "retired": false }, { "firstName": "Çınar&
[
{
"firstName": "Sena",
"lastName": "Turan",
"age": 19,
"retired": false
},
{
"firstName": "Çınar",
"lastName": "Turan",
"age": 1,
"retired": false
},
{
"firstName": "Ahmet",
"lastName": "Turan",
"age": 55,
"retired": true
}
]
比如它包含多少“firstName”或“age”变量。有人对此有意见吗?谢谢。
你的数组。过滤器(person=>“age”亲自过滤)。例如,长度应该适用于年龄。您可以调整它的其他属性。您可以减少数组并增加数组对象中每个元素的计数:
const arr=[{“firstName”:“Sena”,“lastName”:“Turan”,“age”:19,“retired”:false},{“firstName”:“chiınar”,“lastName”:“Turan”,“age”:1,“retired”:false},{“firstName”:“Ahmet”,“lastName”:“Turan”,“age”:55,“retired”:true};
const result=arr.reduce((acc,curr)=>{
对于(让el以货币表示){
acc[el]=acc[el]==null?1:acc[el]+1;
}
返回acc;
}, {});
控制台日志(结果)代码>您也可以简单地浏览所有项目并检查您想要的特定项目:
const arr=[{“firstName”:“Sena”,“lastName”:“Turan”,“age”:19,“retired”:false},{“firstName”:“chiınar”,“lastName”:“Turan”,“age”:1,“retired”:false},{“firstName”:“Ahmet”,“lastName”:“Turan”,“age”:55,“retired”:true};
常量计数=(it)=>{
让计数=0;
对于(arr的el){
if(el[it]){
计数++;
}
}
返回计数;
};
console.log(count(“firstName”)代码>如果我可以添加我的尝试,这是用ES6编写的:
const countAppearance = key => {
let count = 0;
arr.forEach(record => (count += record[key] ? 1 : 0));
return count;
};
@tunayvaz还有一个非常重要的细节:所有这些函数实际上并没有检查键本身,而是检查该键的值是否存在。也就是说,如果您未定义所有“年龄”,它将为您提供0,即使年龄出现在所有3条记录中。如果您想要一个严格工作的函数,您可能需要查看Object.keys()或其他内容。谢谢您的快速回答。非常感谢你的帮助。这仅在JSON数据写入JS文件时有效。我有一个包含这些变量的外部本地JSON文件。当我在这种情况下尝试这个解决方案时,我的输出是:{0:1,1:1,2:1}而不是{“firstName”:3,“lastName”:3,“age”:3,“retired”:3}我哪里做错了?谢谢。写const arr=JSON.parse(file)
然后@tunayvazIt工作得很好,谢谢你的帮助。但我想知道“el”和“it”变量代表什么?很抱歉,我只是不熟悉JS。它只是您定义的一个参数,名称并不重要,可以是任何东西:el基本上说明了数组中的元素。尝试阅读有关循环的内容,它会变得更清晰我认为const countAppearance=(arr,key)=>arr.reduce((acc,rec)=>acc+(Object.keys(rec).includes(key)?1:0,0)代码>会更干净。这是非常重要的细节。谢谢你的介绍。实际上,我需要的是计算键的值(如果它们存在),而不是键本身。我的糟糕表现。