首页 > 编程语言 > 详细

JavaScript 一维数组转二维数组

时间:2021-07-02 11:45:54      阅读:15      评论:0      收藏:0      [点我收藏+]

问题描述:

有如下结构的一维数组:

const list = [
    {grade: 小学, city: 北京, count: 18},
    {grade: 小学, city: 上海, count: 12},
    {grade: 小学, city: 杭州, count: 19},
    {grade: 小学, city: 深圳, count: 10},
    {grade: 初中, city: 北京, count: 18},
    {grade: 初中, city: 上海, count: 12},
    {grade: 初中, city: 杭州, count: 19},
    {grade: 初中, city: 深圳, count: 10},
    {grade: 高中, city: 北京, count: 18},
    {grade: 高中, city: 上海, count: 12},
    {grade: 高中, city: 杭州, count: 19},
    {grade: 高中, city: 深圳, count: 10},
    {grade: 大学, city: 北京, count: 18},
    {grade: 大学, city: 上海, count: 12},
    {grade: 大学, city: 杭州, count: 19},
    {grade: 大学, city: 深圳, count: 10},
]

需要处理为二维数组,其中第一维是 grade,第二维是 city:

cosnt res = [
  {
    name: "小学", value:
    [
      {name: "北京", value: 18}
      {name: "上海", value: 12}
      {name: "杭州", value: 19}
      {name: "深圳", value: 10}
    ]
  }
  {
    name: "初中", value: value:
    [
      {name: "北京", value: 18}
      {name: "上海", value: 12}
      {name: "杭州", value: 19}
      {name: "深圳", value: 10}
    ]
  }
  {
    name: "高中", value: 
    [
      {name: "北京", value: 18}
      {name: "上海", value: 12}
      {name: "杭州", value: 19}
      {name: "深圳", value: 10}
    ]
  }
  {
    name: "大学", value: 
    [
      {name: "北京", value: 18}
      {name: "上海", value: 12}
      {name: "杭州", value: 19}
      {name: "深圳", value: 10}
    ]
  }
]

 

解决方案:

/**
 * 将一维数组处理为二维数组
 * @param {Array} list 需要处理的一维数组
 * @param {Object} extra 包含 nameKey 和 valueKey
 * @param {Array} nameKey 长度为二的数组,依序为 name 取值
 * @param {String} valueKey value 取值的键
 * @returns 
 */
function convertOneDimArray(list, extra) {
  const { nameKey, valueKey } = extra || {};

  if (!nameKey || nameKey.length < 2 || !Array.isArray(list)) {
    return null;
  }

  const [name1, name2] = nameKey;
  const xMap = new Map();

  list.forEach((item) => {
    const x = item[name1];
    const y = {
      name: item[name2],
      value: item[valueKey],
    }
    const xValue = xMap.get(x);
    if (!xValue) {
      xMap.set(x, {
        name: x,
        value: [y],
      });
    } else {
      xValue.value.push(y)
    }
  });

  return [...xMap.values()];
}

 

技术分享图片

 

JavaScript 一维数组转二维数组

原文:https://www.cnblogs.com/wisewrong/p/14959528.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!