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

发布于 2022-09-12 13:10:38 字数 473 浏览 11 评论 0

问题描述

初衷是根据把相同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'}]

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

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

发布评论

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

评论(2

白芷 2022-09-19 13:10:38

直接上代码吧~

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))
菊凝晚露 2022-09-19 13:10:38

直接甩代码

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