JS 根据数组对象中某个字段的值,重组新的数组对象

33 篇文章 0 订阅
12 篇文章 0 订阅

现在要处理的数组对象

let list = [
    {is_show: true, name: "小哥哥", state: true, trial: false, type: 1},
    {is_show: true, name: "小姐姐", state: true, trial: false, type: 1},
    {is_show: true, name: "二次元", state: true, trial: false, type: 1},
    {is_show: true, name: "风景", state: true, trial: false, type: 1},
    {is_show: true, name: "男生", state: true, trial: false, type: 2},
    {is_show: true, name: "女生", state: true, trial: false, type: 2},
    {is_show: true, name: "动漫", state: true, trial: false, type: 2},
    {is_show: true, name: "人物", state: true, trial: false, type: 3},
    {is_show: true, name: "星空", state: true, trial: false, type: 3},
    {is_show: true, name: "科技", state: true, trial: false, type: 3}
]

希望重组得到下面这个数据结构

[
    {
        type: 1,
        list: [
            {is_show: true, name: "小哥哥", state: true, trial: false, type: 1},
            {is_show: true, name: "小姐姐", state: true, trial: false, type: 1},
            {is_show: true, name: "二次元", state: true, trial: false, type: 1},
            {is_show: true, name: "风景", state: true, trial: false, type: 1},
        ]
    },
    {
        type: 2,
        list: [
            {is_show: true, name: "男生", state: true, trial: false, type: 2},
            {is_show: true, name: "女生", state: true, trial: false, type: 2},
            {is_show: true, name: "动漫", state: true, trial: false, type: 2},
        ]
    },
    {
        type: 3,
        list: [
            {is_show: true, name: "人物", state: true, trial: false, type: 3},
            {is_show: true, name: "星空", state: true, trial: false, type: 3},
            {is_show: true, name: "科技", state: true, trial: false, type: 3}
        ]
    }
]

直接上代码

let list = [
	{is_show: true, name: "小哥哥", state: true, trial: false, type: 1},
	{is_show: true, name: "小姐姐", state: true, trial: false, type: 1},
	{is_show: true, name: "二次元", state: true, trial: false, type: 1},
	{is_show: true, name: "风景", state: true, trial: false, type: 1},
	{is_show: true, name: "男生", state: true, trial: false, type: 2},
	{is_show: true, name: "女生", state: true, trial: false, type: 2},
	{is_show: true, name: "动漫", state: true, trial: false, type: 2},
	{is_show: true, name: "人物", state: true, trial: false, type: 3},
	{is_show: true, name: "星空", state: true, trial: false, type: 3},
	{is_show: true, name: "科技", state: true, trial: false, type: 3}
]
						
let newList = list.map(item => {
	return {type: item.type, data: []}
})
						
// 数组去重
let hash = {};
newList = newList.reduce((item, next) => {
	hash[next.type]? '': hash[next.type] = true && item.push(next);
							
	return item
}, [])
						
//给每个对象的data追加数据
list.forEach((item, index) => {
	for(let i in newList) {
		if(item.type == newList[i].type) {
			newList[i].data.push(item)
		}
	}
})
console.log(newList)

结果

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值