遍历json对象改变结构?

作者站长头像
站长
· 阅读数 19
let indexData = [
  {
    index: "A",
    name: "阿依莫"
  },
  {
    index: "A",
    name: "阿凡达"
  },
  {
    index: "C",
    name: "曹操"
  },
  {
    index: "C",
    name: "曹海军"
  },
  {
    index: "C",
    name: "陈晨"
  },
  {
    name: "没有index"
  },
  {
    index: "啊",
    name: "index不是字母"
  }
]

数据量有点大,请问该如何遍历得到如下格式又节省性能:

[
  {
    index: "A",
    datas: [
      {
        index: "A",
        name: "阿依莫"
      },
      {
        index: "A",
        name: "阿凡达"
      }
    ]
  },
  {
    index: "C",
    datas: [
      {
        index: "C",
        name: "曹操"
      },
      {
        index: "C",
        name: "曹海军"
      },
      {
        index: "C",
        name: "陈晨"
      }
    ]
  },
  {
    index: "#",
    datas: [
      {
        name: "没有index"
      },
      {
        index: "啊",
        name: "index不是字母"
      }
    ]
  }
]
回复
1个回答
avatar
test
2024-07-10
let indexData = [
  {
    index: "A",
    name: "阿依莫"
  },
  {
    index: "A",
    name: "阿凡达"
  },
  {
    index: "C",
    name: "曹操"
  },
  {
    index: "C",
    name: "曹海军"
  },
  {
    index: "C",
    name: "陈晨"
  },
  {
    name: "没有index"
  },
  {
    index: "啊",
    name: "index不是字母"
  }
]

function isLetters( str ){
    var re=/^[A-Za-z]+$/;
    if (str.match(re) == null)
        return false;
    else
        return true;
}

const groupByCategory = indexData.reduce((group, product) => {
  let { index } = product;
  if(!index || !isLetters(index)){
    index='#'
  }
    
  group[index] = group[index] ?? [];
  group[index].push(product);
  return group;
}, {});
console.log(groupByCategory);

answer image

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容