我想知道如何计算对象中重复键的数量。
我的目标是" a"我使用键(a)获得了这个对象的键
-i
我如何找到总次数" com"存在于上述?我应该得到2的长度。
提前致谢
答案 0 :(得分:2)
不,JavaScript对象不能有重复的键。钥匙必须都是独一无二的。这个主题有一个很好的thread on Stack Overflow。
如果假设你有可能的对象数组。使用另一个对象作为计数器,如此
var db = [
{Id: "1" , Player: "Nugent",Position: "Defenders"},
{Id: "2", Player: "Ryan",Position: "Forwards"},
{Id: "3" ,Player: "Sam",Position: "Forwards"},
{Id: "4", Player: "Bill",Position: "Midfielder"},
{Id: "5" ,Player: "Dave",Position: "Forwards"},
{Id: "6", Player: "Bill",Position: "Midfielder"}
]
var counter = {};
for (var i = 0; i < db.length; i += 1) {
counter[db[i].Position] = (counter[db[i].Position] || 0) + 1;
}
for (var key in counter) {
if (counter[key] > 1) {
console.log("we have ", key, " duplicated ", counter[key], " times");
}
}
答案 1 :(得分:1)
忽略一个对象不能有重复键(或假设你的keys()
函数允许嵌套对象)的事实,并且只处理如何计算特定值出现的次数的问题一个数组,一个简单的方法就是使用array .filter()
method,然后检查结果数组的.length
:
var keys = ["name", "key", "com", "com"];
var comCount = keys.filter(v => v === "com").length;
console.log(comCount); // 2
如果您需要支持那些不执行ES6箭头功能的旧浏览器:
keys.filter(function(v) { return v === "com"; }).length;
如果您需要执行此操作,请将其包装在自定义函数中:
function countValueInArray(val, arr) {
return arr.filter(v => v === val).length;
}
var keys = ["name", "key", "com", "com"];
console.log(countValueInArray("com", keys)); // 2
console.log(countValueInArray("abc", keys)); // 0
console.log(countValueInArray("key", keys)); // 1
或者您可以手动编写for
循环代码。或者使用.reduce()
。等