首页 > 解决方案 > 具有键号和重复字符串值的 JSON 对象分隔为带有计数的字符串数组

问题描述

我有一个下面提到的格式的 json 对象。我需要一个函数来返回课程名称和计数。这个问题有一个我的问题的答案。此答案适用于不同的 json 对象。[“高级数据结构”,3],[“高级-r”,3]

// Size of the JSON Object
  let json = {
    "0": "advanced-data-structures",
    "1": "advanced-data-structures",
    "145": "advanced-data-structures",
    "149": "advanced-excel",
    "185": "advanced-excel",
    "186": "advanced-r",
    "202": "advanced-r",
    "203": "advanced-r",
    "204": "advanced-trading-algorithms",
    "205": "advanced-trading-algorithms",
    "206": "agile-planning-for-software-products",
    "276": "agile-planning-for-software-products",
    "277": "agile-planning-for-software-products",
    "278": "algorithmic-thinking-1",
    "282": "algorithmic-thinking-1",
    "283": "algorithmic-thinking-1"
  };
  let arrayOfCourses = [];
  let count = Object.keys(json).length;
  Object.keys(json).forEach(function(prop) {
    console.log('Key Count', prop)
  });
  Object.values(json).forEach(function (prop){
    console.log('Value', prop);
    // I would need something like this
    // ["advanced-data-structures", 3],
    // ["advanced-r", 3]
  });

  for(var i = 0 ; i< count; i++) {
    console.log(json[i])
    arrayOfCourses.push(json[i]);
  }
  let uniqueItems = Array.from(new Set(arrayOfCourses))
  // unique Items removing duplicates. 
  console.log(uniqueItems)

标签: javascriptarraysmultidimensional-array

解决方案


您可以先获取对象的 Object.values,然后根据课程名称对其进行缩减:

const json = { "0": "advanced-data-structures", "1": "advanced-data-structures", "145": "advanced-data-structures", "149": "advanced-excel", "185": "advanced-excel", "186": "advanced-r", "202": "advanced-r", "203": "advanced-r", "204": "advanced-trading-algorithms", "205": "advanced-trading-algorithms", "206": "agile-planning-for-software-products", "276": "agile-planning-for-software-products", "277": "agile-planning-for-software-products", "278": "algorithmic-thinking-1", "282": "algorithmic-thinking-1", "283": "algorithmic-thinking-1" };

const result = Object.entries(Object.values(json).reduce((a,e)=>{
    a[e] = a[e] || 0;
    a[e]+=1;
    return a;
},{}));

console.log(result);

在减少之后,您可以获取entries该结果对象。


推荐阅读