Javascript中C++ std::unordered_map<char, int> 的等价物是啥?

Posted

技术标签:

【中文标题】Javascript中C++ std::unordered_map<char, int> 的等价物是啥?【英文标题】: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

【问题讨论】:

【参考方案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));

【讨论】:

以上是关于Javascript中C++ std::unordered_map<char, int> 的等价物是啥?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 javascript 应用程序中使用 c++ 库

如何在 Cheerp(C++ 到 JavaScript 转译器)中保留变量名

从运行在 Web 浏览器控件中的 JavaScript 脚本调用 C++ 函数

javaScript变量和c++错误

在 Qt 中将 C++ 对象公开给 Javascript

如何将多媒体 HTML/JavaScript 应用程序嵌入到 C++ 代码中