我正在尝试创建一个返回数组频率分布的函数。此函数应返回一个对象,其中键是唯一元素,值是这些元素出现的频率。
我的代码如下:
function getFrequencies(arr) {
let obj = {};
for (let i=0; i<arr.length; i++){
let element = arr[i];
console.log(element)
// check if key exists in object already
// if it exists, add 1 to the value
if (obj[element] !== undefined){
obj[element] += 1;
}
// if it does not exist, add 1 to setup future elements
else {
obj[element] === 1;
}
}
return obj
}
getFrequencies([[“ A”,“ B”,“ A”,“ A”,“ A”])
我的代码返回:{}应该返回的时间:
{ A: 4, B: 1 }
我究竟做错了什么?
你的另一部分是平等而不是分配
obj[element] === 1;
它应该是
obj[element] = 1;
因此您的代码实际上永远不会初始化任何键 obj
function getFrequencies(arr) {
let obj = {};
for (let i = 0; i < arr.length; i++) {
let element = arr[i];
if (obj[element] !== undefined) {
obj[element] += 1;
console.log(obj, 'in if')
}
else {
obj[element] === 1;
console.log(obj, 'in else')
}
}
return obj
}
console.log(getFrequencies(["A", "B", "A", "A", "A"]));
您可以简单地使用 reduce
function getFrequencies(arr) {
return arr.reduce((op, inp) => {
op[inp] = op[inp] || 0
op[inp]++
return op
},{})
}
console.log(getFrequencies(["A", "B", "A", "A", "A"]));
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句