js将数组对象中某个值相同的对象合并成一个新对象

比如请求回来的数组是下面list这样子的

let list=[
	    {name:'张小三',home:'北京',age:15},
	    {name:'李老四',home:'上海',age:15},
	    {name:'王小五',home:'上海',age:15},
	    {name:'马老六',home:'上海',age:15},
	    {name:'阮小七',home:'深圳',age:15},
	    {name:'苏小八',home:'北京',age:15},
	    {name:'牛大娃',home:'深圳',age:15},
	    {name:'赵一',home:'东莞',age:15},
	    {name:'钱二',home:'东莞',age:15},
	    {name:'孙三',home:'三亚',age:15},
	    {name:'孙悟空',home:'三亚',age:15},
	    {name:'八戒',home:'三亚',age:15},
	    {name:'和尚',home:'太原',age:15},
	    {name:'唐僧',home:'太原',age:15},
	    {name:'唐老鸭',home:'郑州',age:15},
	    {name:'唐伯虎',home:'太原',age:15},
	    {name:'唐果',home:'郑州',age:15}
	]

想把它渲染成下面这种格式

homemessage
北京张三、苏小八
上海李老四、王小五…
//如果循环创建的话需要把上面的数组变成下面这种格式
	let newList = [
			{
			home:'北京',
			mess:[
					{name:'张小三',home:'北京'.....},
					{.....}
				]
			},
			{
			home:'上海',
			mess:[
					{name:'张小三',home:'北京'.....},
					{.....}
				]
			}
			.......
		]

我的做法是

	let newList = [];
    function handler(arr,newList){
        let tempArr = [];
        for(let i = 0; i < arr.length; i++){
            if(tempArr.indexOf(arr[i].home)===-1){//查找tempArr里面有没有跟arr相同的home
               newList.push({//如果没有就拼到新的数组中
                   home:arr[i].home,
                   mess:[arr[i]]
               })
               tempArr.push(arr[i].home)//往tempArr里面push home;
            }else{//如果tempArr里面有home与arr[i].home相同,就表示接下来的home与数组中接下来出现的数据一样了;
                for(let j = 0; j < newList.length;j++){//那就循环新的list与arr[i].home相比较;
                    if(newList[j].home===arr[i].home){//如果有
                    console.log( newList[j].mess)
                      newList[j].mess.push(arr[i]); // 就push到相对应home的数组项中
                    }
                }
               
            }
        }
        console.log(newList,tempArr);
   }
   handler(list,newList);

问题解决了,你们是用什么办法解决的呢?求指教,欢迎留言

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值