数组拆分问题

 datalist: [
          {categoryId: "f5665104-cff9-47c9-b44c-b92694e45767", categoryName: "热销商品"},
          {categoryId: "f5665104-cff9-47c9-b44c-b92694e45767", categoryName: "热销商品"},
          {categoryId: "f5665104-cff9-47c9-b44c-b92694e45767", categoryName: "热销商品"},
          {categoryId: "f5665104-cff9-47c9-b44c-b92694e45767", categoryName: "推荐商品"},
          {categoryId: "f5665104-cff9-47c9-b44c-b92694e45767", categoryName: "推荐商品"},
          {categoryId: "f5665104-cff9-47c9-b44c-b92694e45767", categoryName: "促销商品"},
          {categoryId: "f5665104-cff9-47c9-b44c-b92694e45767", categoryName: "促销商品"},
          {categoryId: "f5665104-cff9-47c9-b44c-b92694e45767", categoryName: "促销商品"},
          ……
        ]

按照categoryName的不同拆分成几个数组。应该怎么写?

[{categoryId: "f5665104-cff9-47c9-b44c-b92694e45767", categoryName: "热销商品"},
{categoryId: "f5665104-cff9-47c9-b44c-b92694e45767", categoryName: "热销商品"},
{categoryId: "f5665104-cff9-47c9-b44c-b92694e45767", categoryName: "热销商品"},];
[{categoryId: "f5665104-cff9-47c9-b44c-b92694e45767", categoryName: "推荐商品"},
{categoryId: "f5665104-cff9-47c9-b44c-b92694e45767", categoryName: "推荐商品"},]
[{categoryId: "f5665104-cff9-47c9-b44c-b92694e45767", categoryName: "促销商品"},
 {categoryId: "f5665104-cff9-47c9-b44c-b92694e45767", categoryName: "促销商品"},
 {categoryId: "f5665104-cff9-47c9-b44c-b92694e45767", categoryName: "促销商品"},]
阅读 1.3k
2 个回答
//var data = {}
var data = {sort:[]}
datalist.forEach((item,index)=>{
    var s = item.categoryName
    data[s] ? data[s].push(item) : (data[s] = [item],data.sort.push(s))
    //data[s] ? data[s].push(item) : data[s] = [item]
})
//data = Object.values(data)
//上面object转数组是无序的,所以加个sort记录所有的商品类型及顺序
data = data.sort.map((item,index)=>{
    return data[item]
})

下面快点

var data = []
datalist.forEach((item,index)=>{
    if(data.length == 0 || item.categoryName!==data[data.length-1][0].categoryName){
        data.push([])
    }
    data[data.length-1].push(item)
})

楼主,如果你已经排好序的话,是不是要这个效果:

var newDataArray = dataList.reduce((target,current)=>{
    if(target[target.length-1] == null || target[target.length-1][target[target.length-1].length - 1].categoryName !== current.categoryName) {
        target.push([current])
    } else {
        target[target.length-1].push(current)
    }
    return target

}, []);

console.log(newDataArray)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题