18

文字列内の各文字の頻度をカウントできるループを作成する必要があります。

例えば:"aabsssd"

出力:a:2, b:1, s:3, d:1

また、オブジェクトのプロパティ名と同じ文字をマップしたい。これを行う方法はありますか?

どうすればいいのかわかりません。

これは私がこれまでのところです:

var arr = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"];

function counter(x) {
  var count = 0,
    temp = [];
  x = x.split('');
  console.log(x);
  for (var i = 0, len = x.length; i < len; i++) {
    if (x[i] == "a") {
      count++;
    }
  }
  return count;
}
var a = "aabbddd";
console.log(counter(a));

4

20 に答える 20

34

どうぞ:

function getFrequency(string) {
    var freq = {};
    for (var i=0; i<string.length;i++) {
        var character = string.charAt(i);
        if (freq[character]) {
           freq[character]++;
        } else {
           freq[character] = 1;
        }
    }

    return freq;
};
于 2013-09-04T17:13:25.270 に答える
9

別の解決策:

function count (string) {  
  var count = {};
  string.split('').forEach(function(s) {
     count[s] ? count[s]++ : count[s] = 1;
  });
  return count;
}
于 2014-04-04T11:59:48.447 に答える
3

単語ヒストグラムを取得するより宣言的な方法は、reduce を使用して文字を反復処理し、文字をキーとして、頻度を値として含む新しいオブジェクトを作成することです。

function getFrequency(str) {
  return str.split('').reduce( (prev, curr) => {
    prev[curr] = prev[curr] ? prev[curr] + 1 : 1;
    return prev;
  }, {});
};

console.log(getFrequency('test')); // => {t: 2, e: 1, s: 1}

于 2016-12-11T13:34:00.167 に答える
1

簡単な方法。さらに、アルファベット順にソートされたリストを取得します。配列をループし、文字が既にオブジェクトにあるかどうかを評価します。false の場合、文字がオブジェクトに追加されます。true の場合、その頻度が 1 単位増加します。

const text= "Lorem ipsum dolor sit amet consectetur adipiscing"
const textAsArray = text.split('').sort()
let charactersList = {}

for (char of textAsArray) {

   if (!charactersList[char]) {
    charactersList[char]=1;
   }
   else {
    charactersList[char]++
  }
}

console.log(charactersList)   
于 2019-09-28T19:31:48.417 に答える
0
for(i = strlen(string)var string = 'aabsssd';
var chars = new Array();
for(var i = 0; i < string.length; i++){
    var char = string.charAt(i);
    if(chars[char] == undefined){
        chars[char] = 0;
    }
    chars[char]++;
}
console.log(chars);
于 2013-09-04T17:20:39.877 に答える
0

underscore.js を使用した別のオプションを次に示します。

function charCount(str) {
    return _(str.split('')).countBy(function(char) {
        return char.toLowerCase();
    });
}

charCount('aaabbbbdd')出力Object {a: 3, b: 4, d: 2}

于 2013-09-04T17:19:55.017 に答える