一个数组对象,不打扰排序,拆分成多个数组

新手上路,请多包涵

问题描述

初衷是根据把相同id的对象丢到一个新数组里,然后如果遇到id不同的就停止,如此反复

相关代码

arr = [
{id:1,name:'a'},
{id:1,name:'a1'},
{id:1,name:'a2'},
{id:2,name:'b'},
{id:1,name:'c'},
{id:2,name:'d'},
{id:2,name:'d1'},
{id:1,name:'e'}
]

想根据id拆分成如下数组
arr1 = [{id:1,name:'a'},{id:1,name:'a1'},{id:1,name:'a2'}]
arr2 = [{id:2,name:'b'}]
arr3 = [{id:1,name:'c'}]
arr4 = [{id:2,name:'d'},{id:2,name:'d1'}]
arr5 = [{id:1,name:'e'}]

阅读 2.1k
2 个回答

直接上代码吧~

const handleArr = arr => {
  let result = {}
  let currIndex = 0
  arr.reduce((prev, curr) => {
    if (prev.id === curr.id) {
      result[`arr${currIndex}`].push(curr)
    } else {
      currIndex++
      result[`arr${currIndex}`] = [curr]
    }
    return curr
  }, {})
  return result
}
console.log(handleArr(arr))

直接甩代码

let obj = {};
function findFilter(arr, index = 1) {
  obj['arr' + index] = [];
  let id = null;
  let idNext = null;
  for (let i = 0; i < arr.length; i++) {
    id = arr[i].id;
    obj['arr' + index].push(arr[i])
    if (arr[i + 1]) {
      idNext = arr[i + 1].id;
      if (id !== idNext) {
        findFilter(arr.slice(i+1), ++index)
        break
      }
    }
  }
}

findFilter(arr)
console.log(obj)
/** 
{ arr1: 
   [ { id: 1, name: 'a' },
     { id: 1, name: 'a1' },
     { id: 1, name: 'a2' } ],
  arr2: [ { id: 2, name: 'b' } ],
  arr3: [ { id: 1, name: 'c' } ],
  arr4: [ { id: 2, name: 'd' }, { id: 2, name: 'd1' } ],
  arr5: [ { id: 1, name: 'e' } ] 
}
*/
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题