比如请求回来的数组是下面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}
]
想把它渲染成下面这种格式
home | message |
---|---|
北京 | 张三、苏小八 |
上海 | 李老四、王小五… |
//如果循环创建的话需要把上面的数组变成下面这种格式
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);
问题解决了,你们是用什么办法解决的呢?求指教,欢迎留言