js数组算法问题

发布于 2022-09-30 23:06:14 字数 1684 浏览 34 评论 0

求实现该函数,处理数据,根据配置项合并数据相同项,再以树形展示。

/*
  * 处理数据 dealData
  * @param sourceData {array} 数据源
  * @param headerKeys {array} 分类key集合
  * @return 处理后数据
  * */
  const dealData = (sourceData, headerKeys) => {

  }
// 示例1
let source = [
    { province: '浙江', city: '杭州', dict: '萧山' },
    { province: '浙江', city: '杭州', dict: '滨江' },
    { province: '浙江', city: '杭州', dict: '上城' },
    { province: '浙江', city: '宁波', dict: '鄞州' },
    { province: '浙江', city: '宁波', dict: '北仑' },
    { province: '浙江', city: '宁波', dict: '余姚' },
    { province: '上海', city: '上海', dict: '浦东新区' },
  ]
  let header = ['province', 'city', 'dict']
  
  let r = dealData(source,header)
  /* r = [
    {
      province: '浙江',
      children: [
        {
          city: '杭州',
          children: ['萧山', '滨江', '上城']
        },
        {
          city: '宁波',
          children: ['鄞州', '北仑', '余姚']
        },
      ]
    },
    {
      province: '上海',
      children: [
        {
          city: '上海',
          children: ['浦东新区']
        }
      ]
    }
  ]*/
// 示例2
let source1 = [
    { a: 'a1', b: 'b1', c: 'c1' },
    { a: 'a1', b: 'b1', c: 'c2' },
    { a: 'a1', b: 'b3', c: 'c3' },
    { a: 'a2', b: 'b4', c: 'c4' },
    { a: 'a3', b: 'b5', c: 'c5' }
  ]
  let header1 = ['a', 'b']
  let r1 = dealData(source1,header1)
  /* r1 = [
    {
      a: 'a1',
      children: [
        { b: 'b1' },
        { b: 'b3' }
      ]
    },
    {
      a: 'a2',
      children: [
        { b: 'b4' }
      ]
    },
    {
      a: 'a3',
      children: [
        { b: 'b5' }
      ]
    }
  ]
*/

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

百善笑为先 2022-10-07 23:06:14

image.png

// 示例1
let source = [
    { province: '浙江', city: '杭州', dict: '萧山' },
    { province: '浙江', city: '杭州', dict: '滨江' },
    { province: '浙江', city: '杭州', dict: '上城' },
    { province: '浙江', city: '宁波', dict: '鄞州' },
    { province: '浙江', city: '宁波', dict: '北仑' },
    { province: '浙江', city: '宁波', dict: '余姚' },
    { province: '上海', city: '上海', dict: '浦东新区' },
  ]
  let header = ['province', 'city', 'dict']
  
/*
  * 处理数据 dealData
  * @param sourceData {array} 数据源
  * @param headerKeys {array} 分类key集合
  * @return 处理后数据
  * */
  const dealData = (sourceData=[], headerKeys=[]) => {
let objMap = sourceData.reduce((acc,item)=>((((acc[item[headerKeys[0]]]||={})[item[headerKeys[1]]])||=[]).push(item[headerKeys[2]]),acc),{});
console.log(objMap);
return Object.entries(objMap).map(([province,provinceChildren])=>({province,children:Object.entries(provinceChildren).map(([city,children])=>({city,children}))}));

  }
  let r = dealData(source,header)
console.log(r);

类似问题
https://segmentfault.com/q/10...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文