试图在JavaScript中做一个计数器对象

时间:2019-04-06 17:02:19

标签: javascript object

我试图像这样在JavaScript中创建一个计数器对象: 编辑:我添加了一个示例

    let profile={skill:['javascript','javascript','html','css','css']}
    let objectCount={}

profiles.map(profile => {
        profile.skills.map(skill => {
          skill = skill.toLowerCase();
          if (!(skill in objectCount)) {
            objectCount = { ...objectCount, [skill]: 1 };
          } else {
            objectCount.skill = objectCount.skill + 1;
          }
        });
      });
    }

我有一系列配置文件,并且其中包含一系列技能,例如:'javascript','html','css'等 我希望将objectCount设置为:

objectCount={
  'html':1,
  'javascript:2,
   'css':2
}

但是由于某种原因 objectCount.skill=objectCount.skill+1不起作用,因为我得到了一个在每个键中都带有1的对象, 有人知道我的错误是什么吗?

2 个答案:

答案 0 :(得分:3)

您正尝试增加skill对象上不存在的键objectCount的值。相反,您想增加具有skill变量名称的键的值。因此,您必须使用objectCount[skill]而不是objectCount.skill

let profiles = [
  {
    skills: ['html', 'js']
  },
  {
    skills: ['html', 'php']
  }
]
let objectCount = {}

profiles.map(profile => {
  profile.skills.map(skill => {
    skill = skill.toLowerCase();
    if (!(skill in objectCount)) {
      objectCount = { ...objectCount, [skill]: 1 };
    } else {
      objectCount[skill] = objectCount[skill] + 1;
    }
  });
});
console.log(objectCount);

答案 1 :(得分:0)

另一种创建这个计数器映射的方法是使用reduce函数而不是map。

例如:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce#counting_instances_of_values_in_an_object