数组处理的问题 ["896,911", "896,900", "793,796,801", "793,815"] 分组归类

 ["896,911", "896,900", "793,796,801", "793,815"]
我想把这样的数组处理成
["896,911,900","793,796,801,815"]
就是把字符串第一个相同的合并成一个字符串放到数组中

阅读 1.7k
2 个回答
function trans(arr) {
   const map = arr.reduce((map, str) => {
      const [key, ...restPart] = str.split(',');
      if(!map[key]) {
        map[key] = str;
      } else if(restPart.length) {
        map[key] = map[key].concat(',', restPart.join(','))
      }
      return map;
   }, {})  

   return Object.values(map);
}

// ["793,796,801,815", "896,911,900"]
trans(["896,911", "896,900", "793,796,801", "793,815"])

确保你的数据源有序,循环做即可,如下

t = ["896,911", "896,900", "793,796,801", "793,815"]
for(i=0,prev='';i<t.length;i++){
  idx = t[i].indexOf(",")
  if(i==0 || (t[i].slice(0,idx) != prev)){
    prev = t[i].slice(0,idx)
  }else{
    t[i-1] +=t[i].substr(idx)
    t.splice(i,1)
    i--
  }
}
console.log(t)  // [ '896,911,900', '793,796,801,815' ]
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题