我如何计算数组中元素的频率,我是Java新手,完全迷失了方向,我在这里查看了其他答案,但无法让它们为我工作。非常感谢您的帮助。
function getText() {
var userText;
userText = document.InputForm.MyTextBox.value; //get text as string
alphaOnly(userText);
}
function alphaOnly(userText) {
var nuText = userText;
//result = nuText.split("");
var alphaCheck = /[a-zA-Z]/g; //using RegExp create variable to have only alphabetic characters
var alphaResult = nuText.match(alphaCheck); //get object with only alphabetic matches from original string
alphaResult.sort();
var result = freqLet(alphaResult);
document.write(countlist);
}
function freqLet(alphaResult) {
count = 0;
countlist = {
alphaResult: count
};
for (i = 0; i < alphaResult.length; i++) {
if (alphaResult[i] in alphaResult)
count[i] ++;
}
return countlist;
}
要计算频率,您应该使用一个对象,该对象的属性与输入字符串中出现的字母相对应。同样,在增加属性的值之前,应事先检查该属性是否存在。
function freqLet (alphaResult){
var count = {};
countlist = {alphaResult:count};
for (i = 0; i < alphaResult.length; i++){
var character = alphaResult.charAt(i);
if (count[character]) {
count[character]++;
} else {
count[character] = 1;
}
}
return countlist;
}
如果可以使用第三方库,underscore.js提供的功能“ countBy”几乎可以完全满足您的要求。
_.countBy(userText, function(character) {
return character;
});
这应该返回映射到一个计数的集合中的一个关联字符数组。
然后,您可以再次使用下划线或您喜欢的任何方法将该对象的键筛选为所需的有限字符集。
执行以下操作:
var __arr = [6,7,1,2,3,3,4,5,5,5]
function __freq(__arr){
var a = [], b = [], prev
__arr.sort((a,b)=>{return a- b} )
for(let i = 0; i<__arr.length; i++){
if(__arr[i] !== prev){
a.push(__arr[i])
b.push(1)
}else{
b[b.length - 1]++
}
prev = __arr[i]
}
return [a , b]
}