在Javascript中,C++的std::unordered_map<char, int>相当于什么?

5

我正在尝试映射字符在字符串中出现的次数。我知道在C++中可以这样实现:

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

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

我该如何将这个翻译成JavaScript?

2个回答

5

我会将字符串转化为一个以字符为索引的对象。传递给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);


charCounts[char] || 0是什么意思? - Tom Oconnor
如果charCounts[char]未定义,则默认为0 - Havenard

0

Javascript已经有了map,您可以通过此代码片段实现与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));


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接