使用Map存储数组值和重复次数

时间:2018-09-15 14:38:34

标签: javascript arrays

我正在学习JavaScript,并且正在尝试解决一个练习,其中必须创建一个包含我名字字母的数组,然后使用Map存储值和每个值出现的次数

我一直在阅读有关Map的信息,我想我应该从与此类似的东西开始,以检查数组是否具有重复项,但是我是一个新手,并且我找不到很多Map示例,因此我没有我在做什么的想法...

  var myMap = new Map([[1, "M"], [2, "a"], [3, "r"], [4, "y"]]);

for (i = 1; i < 5; i++) {
console.log(myMap.has (i));
console.log(myMap.get (i));

  }

谢谢!

3 个答案:

答案 0 :(得分:0)

从这样的事情开始:

var myName = ['M', 'a', 'r', 'y'];
var letterFrequencyMap = new Map();

for (var i = 0; i < myName.length; i++) {
    // Your logic to update letterFrequencyMap
}

console.log(letterFrequencyMap);

答案 1 :(得分:0)

var nameArray = Array.from("mary")
console.log(nameArray)
var map = new Map()

nameArray.forEach(function(character) {
	if (map.has(character)) {
    map.set(character, map.get(character) + 1)
  } else {
    map.set(character, 1)
  }
});

console.log(map);

我已经为您的练习更新了代码,请参阅以下有关Map和Array API的文档:

  1. Map
  2. Array

如有任何疑问,请发表评论。

答案 2 :(得分:0)

您可以从一个空的地图开始,然后用

来增加一个字母的计数
map.get(letters[i])

;如果重新调整falsy的值,则取零。然后添加一个并设置新值。

var string = 'annabelle',
    letters = string.split(''),
    map = new Map,
    i, l;
    
for (i = 0, l = letters.length; i < l; ++i) {
    map.set(letters[i], (map.get(letters[i]) || 0) + 1);
}

map.forEach((v, k) => console.log(k, v));

简短版本

var string = 'annabelle',
    map = string
        .split('')
        .reduce((map, char) => map.set(char, (map.get(char) || 0) + 1), new Map);
    
map.forEach((v, k) => console.log(k, v));