【问题标题】:What is the equivalent of C++ std::unordered_map<char, int> in Javascript?Javascript中C++ std::unordered_map<char, int> 的等价物是什么?
【发布时间】:2018-08-20 00:33:46
【问题描述】:

所以我试图映射一个字符在字符串中出现的次数。我知道在 C++ 中会这样。

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

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

如何将其翻译成 JavaScript?

【问题讨论】:

    标签: javascript c++ hashmap unordered-map


    【解决方案1】:

    我会将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);

    【讨论】:

    • charCounts[char] 是什么 || 0 做吗?
    • @TomOconnor 如果charCounts[char]undefined,则默认为0
    【解决方案2】:

    Javascript 已经有地图,你可以实现与你的 C++ 应用程序相同的结果,如这个 sn-p 所示

    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));

    【讨论】:

      猜你喜欢
      • 2017-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-19
      • 1970-01-01
      • 1970-01-01
      • 2010-09-24
      • 1970-01-01
      相关资源
      最近更新 更多