创建[key,value]的多维数组,其键唯一计数作为JSON对象数组中的值 [英] Create Multidimensional array of [key,value] with key unique count as value from Array of JSON Object

查看:63
本文介绍了创建[key,value]的多维数组,其键唯一计数作为JSON对象数组中的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当前我有服务器返回的json对象数组

Currently i have array of json object returned by server

data: [
  {
    billed: "No",
    designation: "ASE",
    involvement: "Full Time",
    name: "Rishi Ranabhat",
    project: "ABC"
  },
  {
    billed: "No",
    designation: "ASE",
    involvement: "Full Time",
    name: "Biplap Bhattarai",
    project: "DEF"
  },
  {
    billed: "No",
    designation: "SE",
    involvement: "Part Time",
    name: "Ram k",
    project: "DEF"
  },
   ...more json data
];

我必须像下面那样在Array中创建一个值计数,以表示Google图表:

I have to create a count of values in Array like below for representation for google charts:

[
  //designation count
  ["ASE", 2],
  ["SE", 2]
],
  [
    //project count
    ["ABC", 1],
    ["DEF", 2]
  ],
  //and similarly others.

我如何计算完整的先前出现次数的键的出现次数,并且在key的['key','value']中,键是数据的唯一出现次数,而值是不出现的次数?

How can i count the no of occurances of the keys with the values of previous occurance intact, and also in ['key','value'] of key being the unique occurance of data and value being the no of occurance ???

推荐答案

使用

const data = [{"billed":"No","designation":"ASE","involvement":"Full Time","name":"Rishi Ranabhat","project":"ABC"},{"billed":"No","designation":"ASE","involvement":"Full Time","name":"Biplap Bhattarai","project":"DEF"},{"billed":"No","designation":"SE","involvement":"Part Time","name":"Ram k","project":"DEF"}];

function getCount(data, type) {

  // `map` out the data by type
  const typeArr = data.map((obj) => obj[type]);

  // Iterate over the type data. We pass in an initial
  // object to capture the counts, so we need to use
  // `Object.values` to grab the object values at the end
  // of the iteration
  return Object.values(typeArr.reduce((acc, id) => {

    // If the key doesn't exist in the accumulator object
    // create it and create a new array at its value
    acc[id] = acc[id] || [id, 0];

    // Increment the second index (the count)
    acc[id][1]++;

    // Return the object for the next iteration
    return acc;
  }, {}));
}

console.log(getCount(data, 'designation'));
console.log(getCount(data, 'project'));

或者,如果您想在一个操作中执行此操作并返回包含分组信息的对象,则可以使用另一个 reduce 遍历主数据键:

Alternatively, if you wanted to do this in one operation and return an object containing the grouped information, you could use another reduce to iterate over the main data keys:

const data = [{"billed":"No","designation":"ASE","involvement":"Full Time","name":"Rishi Ranabhat","project":"ABC"},{"billed":"No","designation":"ASE","involvement":"Full Time","name":"Biplap Bhattarai","project":"DEF"},{"billed":"No","designation":"SE","involvement":"Part Time","name":"Ram k","project":"DEF"}];

function getCounts(data) {

  // Grab the data keys. It assumes that each object in
  // the array has the same keys
  const keys = Object.keys(data[0]);

  // Using `reduce` iterate over the keys to build
  // up an object that groups the results from the inner
  // `reduce` operation by key
  return keys.reduce((out, key) => {

    // `map` out the data by type
    const typeArr = data.map((obj) => obj[key]);

    // Iterate over the type data. We pass in an initial
    // object to capture the counts, so we need to use
    // `Object.values` to grab the object values at the end
    // of the iteration
    out[key] = Object.values(typeArr.reduce((acc, id) => {

      // If the key doesn't exist in the accumulator object
      // create it and create a new array at its value
      acc[id] = acc[id] || [id, 0];

      // Increment the second index (the count)
      acc[id][1]++;

      // Return the object for the next iteration
      return acc;
    }, {}));
    
    // Return the `out` object for the next iteration
    return out;

  }, {});

}

console.log(getCounts(data));

这篇关于创建[key,value]的多维数组,其键唯一计数作为JSON对象数组中的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆