[英]Count number of occurrences for each char in a string
我想使用 JavaScript 計算給定字符串中每個字符出現的次數。
例如:
var str = "I want to count the number of occurrences of each char in this string";
Output 應該是:
h = 4;
e = 4; // and so on
我試着用谷歌搜索,但沒有找到任何答案。 我想實現這樣的目標; 順序無關緊要。
這在 JavaScript(或任何其他支持地圖的語言)中非常非常簡單:
// The string
var str = "I want to count the number of occurrences of each char in this string";
// A map (in JavaScript, an object) for the character=>count mappings
var counts = {};
// Misc vars
var ch, index, len, count;
// Loop through the string...
for (index = 0, len = str.length; index < len; ++index) {
// Get this character
ch = str.charAt(index); // Not all engines support [] on strings
// Get the count for it, if we have one; we'll get `undefined` if we
// don't know this character yet
count = counts[ch];
// If we have one, store that count plus one; if not, store one
// We can rely on `count` being falsey if we haven't seen it before,
// because we never store falsey numbers in the `counts` object.
counts[ch] = count ? count + 1 : 1;
}
現在counts
具有每個字符的屬性; 每個屬性的值是計數。 你可以像這樣輸出:
for (ch in counts) {
console.log(ch + " count: " + counts[ch]);
}
更短的答案,減少:
let s = 'hello';
var result = [...s].reduce((a, e) => { a[e] = a[e] ? a[e] + 1 : 1; return a }, {});
console.log(result); // {h: 1, e: 1, l: 2, o: 1}
let str = "atul kumar srivastava";
let obj ={};
for(let s of str)if(!obj[s])obj[s] = 1;else obj[s] = obj[s] + 1;
console.log(obj)
我遍歷每個字符並將其與計數一起放入嵌套對象中。 如果字符已經存在於對象中,我只需增加計數。 這是 myObj 的樣子:
myObj = {
char1 = { count : <some num> },
char2 = { count : <some num> },
....
}
這是代碼:
function countChar(str) {
let myObj= {};
for (let s of str) {
if ( myObj[s] ? myObj[s].count ++ : myObj[s] = { count : 1 } );
}
return myObj;
}
var charCount = countChar('abcceddd');
這對我來說效果很好:
function Char_Count(str1) {
var chars = {};
str1.replace(/\S/g, function(l){chars[l] = (isNaN(chars[l]) ? 1 : chars[l] + 1);});
return chars;
}
var myString = "This is my String";
console.log(Char_Count(myString));
您可以在 Javascript 中使用 ES6 中的地圖。 在我看來,提供了一個更簡潔的代碼。 這是我將如何去做
function countChrOccurence ('hello') {
let charMap = new Map();
const count = 0;
for (const key of str) {
charMap.set(key,count); // initialize every character with 0. this would make charMap to be 'h'=> 0, 'e' => 0, 'l' => 0,
}
for (const key of str) {
let count = charMap.get(key);
charMap.set(key, count + 1);
}
// 'h' => 1, 'e' => 1, 'l' => 2, 'o' => 1
for (const [key,value] of charMap) {
console.log(key,value);
}
// ['h',1],['e',1],['l',2],['o',1]
}
我給你非常非常簡單的代碼。
// Converts String To Array var SampleString= Array.from("saleem"); // return Distinct count as a object var allcount = _.countBy(SampleString, function (num) { return num; }); // Iterating over object and printing key and value _.map(allcount, function(cnt,key){ console.log(key +":"+cnt); }); // Printing Object console.log(allcount);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script> <p>Set the variable to different value and then try...</p>
str = "aaabbbccccdefg";
words = str.split("");
var obj = [];
var counter = 1, jump = 0;
for (let i = 0; i < words.length; i++) {
if (words[i] === words[i + 1]) {
counter++;
jump++;
}
else {
if (jump > 0) {
obj[words[i]] = counter;
jump = 0;
counter=1
}
else
obj[words[i]] = 1;
}
}
console.log(obj);
1-liner ES6 方式:
const some_string = 'abbcccdddd';
const charCountIndex = [ ...some_string ].reduce( ( a, c ) => ! a[ c ] ? { ...a, [ c ]: 1 } : { ...a, [ c ]: a[ c ] + 1 }, {} );
console.log( charCountIndex )
您可以將對象用於任務。
第 1 步 - 創建一個對象
第 2 步 - 遍歷字符串
第 3 步 - 在對象中添加字符作為鍵和字符計數作為值
var obj={}
function countWord(arr)
{
for(let i=0;i<arr.length;i++)
{
if(obj[arr[i]]) //check if character is present in the obj as key
{
obj[arr[i]]=obj[arr[i]]+1; //if yes then update its value
}
else
{
obj[arr[i]]=1; //initialise it with a value 1
}
}
}
function cauta() {
var str = document.form.stringul.value;
str = str.toLowerCase();
var tablou = [];
k = 0;
//cautarea caracterelor unice
for (var i = 0, n = 0; i < str.length; i++) {
for (var j = 0; j < tablou.length; j++) {
if (tablou[j] == str[i]) k = 1;
}
if (k != 1) {
if (str[i] != ' ')
tablou[n] = str[i]; n++;
}
k = 0;
}
//numararea aparitilor
count = 0;
for (var i = 0; i < tablou.length; i++) {
if(tablou[i]!=null){
char = tablou[i];
pos = str.indexOf(char);
while (pos > -1) {
++count;
pos = str.indexOf(char, ++pos);
}
document.getElementById("rezultat").innerHTML += tablou[i] + ":" + count + '\n';
count = 0;
}
}
}
此函數將每個唯一的字符放入數組中,然后在 str 中查找每個字符的外觀。 在我的案例中,我獲取數據並將其放入
// Converts String To Array var SampleString= Array.from("saleem"); // return Distinct count as a object var allcount = _.countBy(SampleString, function (num) { return num; }); // Iterating over object and printing key and value _.map(allcount, function(cnt,key){ console.log(key +":"+cnt); }); // Printing Object console.log(allcount);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script> <p>Set the variable to different value and then try...</p>
希望這可以幫助某人
function getNoOfOccurences(str){
var temp = {};
for(var oindex=0;oindex<str.length;oindex++){
if(typeof temp[str.charAt(oindex)] == 'undefined'){
temp[str.charAt(oindex)] = 1;
}else{
temp[str.charAt(oindex)] = temp[str.charAt(oindex)]+1;
}
}
return temp;
}
package com.company;
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
// write your code here
HashMap<Character, Integer> sHashMap = new HashMap(); // using hashMap<key , value > here key = character and value = count
String arr = "HelloWorld";
for (int i = 0; i < arr.length(); i++) {
boolean flag = sHashMap.containsKey(arr.charAt(i)); // check if char is already present
if (flag == true)
{
int Count = sHashMap.get(arr.charAt(i)); // get the char count
sHashMap.put(arr.charAt(i), ++Count); // increment the count and update in hashMap
}
else
{
sHashMap.put(arr.charAt(i), 1); //if char not present then insert into hashMap
}
}
System.out.println(sHashMap);
//OutPut would be like ths {r=1, d=1, e=1, W=1, H=1, l=3, o=2}
}
}
我使用了 Map 對象,該 map 對象不允許您設置任何重復鍵,這使我們的工作變得容易。 我正在檢查 key 是否已經存在於 map 中,如果沒有,我正在插入並將計數設置為 1,如果它已經存在,我正在獲取值然后遞增
const str = "Hello H"
const strTrim = str.replace(/\s/g,'') // HelloH
const strArr=strTrim.split('')
let myMap = new Map(); // Map object
strArr.map(ele=>{
let count =0
if(!myMap.get(ele)){
myMap.set(ele,++count)
}else {
let cnt=myMap.get(ele)
myMap.set(ele,++cnt)
}
console.log("map",myMap)
})
let newStr= "asafasdhfasjkhfweoiuriujasfaksldjhalsjkhfjlkqaofadsfasasdfas";
function checkStringOccurnace(newStr){
let finalStr = {};
let checkArr = [];
let counterArr = [];
for(let i = 0; i < newStr.length; i++){
if(checkArr.indexOf(newStr[i]) == -1){
checkArr.push(newStr[i])
let counter = 0;
counterArr.push(counter + 1)
finalStr[newStr[i]] = 1;
}else if(checkArr.indexOf(newStr[i]) > -1){
let index = checkArr.indexOf(newStr[i])
counterArr[index] = counterArr[index] + 1;
finalStr[checkArr[index]] = counterArr[index];
}
}
return finalStr;
}
let demo = checkStringOccurnace(newStr);
console.log(" finalStr >> ", demo);
我用檢查“空白空間”和“特殊字符”進行了嘗試:
function charCount(str){
const requiredString = str.toLowerCase();
const leng = str.length;
let output = {};
for(let i=0; i<leng; i++){
const activeCharacter = requiredString[i];
if(/[a-z0-9]/.test(activeCharacter)){
output.hasOwnProperty(activeCharacter) ? output[activeCharacter]++ : output[activeCharacter] = 1;
}
}
return output;
}
'🌯🌯🍣🍻'.split('')
//=> ["\ud83c", "\udf2f", "\ud83c", "\udf2f", "\ud83c", "\udf63", "\ud83c", "\udf7b"]
為了檢查和避免空格並將大寫字母轉換為小寫和計數,我們可以像下面那樣做。
function CountNumberOfCharacters(str) {
let countObject = {};
const lowerCaseString = str.toLowerCase();
for (let char of lowerCaseString) {
if (!countObject[char] && char !== ' ') {
countObject[char] = 1;
} else if (char !== ' ') {
countObject[char] = countObject[char] + 1;
}
}
return countObject;
}
這是最簡單的解決方案,您可以找到 n 個字符串字母、數字、特殊字符等。任何 position 中的總數。 謝謝
let stringValue = "AAABCCDDDDDDFFFGGG333333++++"; let stringArray = stringValue.split(""); let stringCompressorArray = []; for (let value of stringArray) { let stringFindeArray = stringArray.filter((str) => { return str === value; }); let repeatValueCounter = stringFindeArray.length + value; if (stringCompressorArray.indexOf(repeatValueCounter) < 0) { stringCompressorArray.push(repeatValueCounter); } } let result = stringCompressorArray.join(", "); console.log("result", result);
快速、簡潔、易於理解
var str = "a a a d";
const countChars = str =>{
const rs = {}
for (let word of str) {
if (word !== " ") rs[word] = rs[word] + 1|| 1;
}
return rs;
}
countChars(str)
試試這個
let txt = 'hello';
let txtArr = txt.split('');
let objCnt = txtArr.reduce((accum, currVal) => {
accum[currVal] = (accum[currVal] || 0) + 1;
return accum;
}, {});
console.log(objCnt);
我認為最少的代碼行是最好的解決方案。 像這樣。
let text= 'I want to count the number of occurrences of each char in this string';
const obj = {};
for (let i = 0; i < text.length; i++) {
const ele = text[i];
obj[ele] === undefined ? obj[ele] = 1 : obj[ele]++
}
console.log(obj);
第二個例子。
text.split('').forEach((ele) => {
obj[ele] === undefined ? obj[ele] =1 : obj[ele]++
})
console.log(obj);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.