将字符串转换为具有出现次数的对象

时间:2017-05-14 07:52:46

标签: javascript object

我曾尝试编写一个函数来执行此操作:

返回对象不区分大小写的字符串的每个字母的出现次数 //例如numOfOccurances('这很棒')=> {t:2,h:1,i:2,s:2,g:1,r:1,e:1,a:1}

function numOfOccurances(string) {
  const stringLower = string.replace(/ /g, '').toLocaleLowerCase();
  const counts = {};
  let ch;
  let count;
  let i;

  for (i = 0; i < stringLower.length; i++) {
    ch = stringLower.charAt(i);
    count = counts[ch];
    counts[ch] = count ? count + 1: 1;
  }
  console.log(stringLower);
  console.log(counts);
}

(它目前输出控制台,所以我可以看到输出)。

我得到的输出是:

Object {t: 2, h: 1, i: 2, s: 2, g: 1…}
a:1
e:1
g:1
h:1
i:2
r:1
s:2
t:2

2 个答案:

答案 0 :(得分:1)

你可以在字符数组上做一个简单的reduce

&#13;
&#13;
const toLowerCase = str =>
  str.toLowerCase()

const numOccurrences = str =>
  Array.from(str, toLowerCase).reduce((acc, c) =>
    Object.assign(acc, { [c]: c in acc ? acc[c] + 1 : 1 }), {})
    
console.log(numOccurrences('This is great'))
// { t: 2, h: 1, i: 2, s: 2, ' ': 2, g: 1, r: 1, e: 1, a: 1 }
&#13;
&#13;
&#13;

答案 1 :(得分:0)

你得到的应该是预期的结果。我在chrome devtools中得到了同样的东西。

Object {t: 2, h: 1, i: 2, s: 2, g: 1…}具有许多属性的对象缩写,因此省略号。然后,您可以单击以展开对象并查看完整的属性列表。