Javascript中C ++ std :: unordered_map <char,int =“”>的等效项是什么?

时间:2018-08-20 00:33:47

标签: javascript c++ hashmap unordered-map

因此,我尝试映射char在字符串中出现的次数。我知道在C ++中会如此。

std::string str = "AbBAaaaa";
std::unordered_map<char, int> myMap;

for(auto i = str)
{
   ++mymap[i];
}

如何将其翻译成JavaScript?

2 个答案:

答案 0 :(得分:4)

我会将reduce字符串放入一个按字符索引的对象。为输入中的每个元素调用传递给reduce的函数,其中第一个参数(a)是累加器,它可以是初始值(此处为{})或其他值。最后一次迭代返回。第二个参数(char是正在迭代的当前字符。

const str = "AbBAaaaa";
const charCounts = Array.prototype.reduce.call(str, (a, char) => {
  a[char] = (a[char] || 0) + 1;
  return a;
}, {});
console.log(charCounts);

您也可以使用

const charCounts = [...str].reduce((a, char) => // ...

它更短,乍一看可能更容易理解,但不必要地从str创建一个中间数组。

具有for循环的命令式版本看起来像:

const str = "AbBAaaaa";
const charCounts = {};
for (let i = 0; i < str.length; i++) {
  const char = str[i];
  charCounts[char] = (charCounts[char] || 0) + 1;
}
console.log(charCounts);

答案 1 :(得分:0)

Javascript已经有了地图,您可以实现本代码段所示的C ++应用相同的结果

function charOccurances(str) {
  var myMap = {};
  if(str.length!==0){
    for (let i = 0; i < str.length; i++) {
      myMap[str[i]] = (myMap[str[i]] || 0) + 1;
    }
  }
  return myMap;
}

const str = "AbABaaaa";
console.log(charOccurances(str));