首页 > 解决方案 > 以优化方式处理 JSON

问题描述

有一个名称和技能字段作为数组 f 对象的 JSON,如何操作这个 JSON?

我正在创建新的 Array Unique,它是独特的技能集,并将其与背书数组的所有技能值进行比较,不知何故我没有得到解决方案,我正在为此寻找天真的和优化的解决方案。

let endorsement = [
  { name: 'James', skill: 'JS' },
  { name: 'steve', skill: 'CSS' },
  { name: 'BOB', skill: 'JS' },
  { name: 'jack', skill: 'HTML' },
  { name: 'bob', skill: 'CSS' },
  { name: 'john', skill: 'JS' }

]
//expected Array = [
// {skill : 'JS , people : ['James','BOB','john'],count : 3},
// {skill : 'HTML , people : ['jack'] , count : 1},
// {skill : 'CSS , people : ['steve' ,'bob] , count : 2}
//]


let skillArray = [...endorsement];

const skillsList = skillArray.map(item => item.skill);
let Unique = [... new Set(skillsList)];
const SkillSet = [];
skillsList.map(item => {
  const newObj = {
    skill: '',
    people: [],
    count: 0
  }
  Unique.map(value => {
    if (value === item) {
      newObj.skill = value;
      newObj.people.push(item.name);
      newObj.count += 1;

    }
    delete value;
    SkillSet.push(newObj);
    delete newObj;
  })
})

console.log(SkillSet);

标签: javascript

解决方案


如果您想按技能对名称进行分组:

let endorsements = [
  { name: 'James', skill: 'JS' },
  { name: 'steve', skill: 'CSS' },
  { name: 'BOB', skill: 'JS' },
  { name: 'jack', skill: 'HTML' },
  { name: 'bob', skill: 'CSS' },
  { name: 'john', skill: 'JS' }
];

let unique = {};

endorsements.forEach(endorsement => {
  unique[endorsement.skill] = unique[endorsement.skill] ? unique[endorsement.skill].push(endorsement.name): [endorsement.name]
})

/*
unique becomes

{
  JS: ['James', 'BOB', 'john'],
  CSS: ['steve', 'bob'],
  HTML: ['jack']
}
*/

推荐阅读