javascript - 怎么使用 Lodash /Js 进行按对象字段分组处理

查看:164
本文介绍了javascript - 怎么使用 Lodash /Js 进行按对象字段分组处理的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

json对象

[
    dictprovinceVOList[{
    areaId: 13257
    cityAreaList:[
    {
        areaCode: "1853"
        areaId: 13265
        areaList: 
        firstLetter:"S"
        langType:"zh_CN"
        latitude:22.124049
        longitude:
        113.559954
        parentId:13257
        pinYin:"shengfangjigetangqu"
        postCode:"820008"
        sortValue:8
        title:"圣方济各堂区"
    },
    {
        ...
    }]
    parentId: 0
    sortValue: 34
    title:"澳门特别行政区"
   },{
    areaId:13238
    cityAreaList:[
    {
        areaCode: "1853"
        areaId: 13265
        areaList: 
        firstLetter:"S"
        langType:"zh_CN"
        latitude:22.124049
        longitude:
        113.559954
        parentId:13257
        pinYin:"shengfangjigetangqu"
        postCode:"820008"
        sortValue:8
        title:"圣方济各堂区"
    },{
        ...
    }]
    parentId:0
    sortValue:33
    title:"香港特别行政区"
   }]


]

得到以下结果。。分组依据是cityAreaList字段:firstLetter

{
   "iniData":"S",
   "cityAreaList":[
        {
          "areaCode":"1853","areaId": 372, ...
        },
        {...}
    ]
}

解决方案

lodash应该没有一步到位的函数

但有个groupBy函数可以用来分组

你可以用一个循环把所有城市的cityAreaList合到一个array

let array = [];
for(let city of citylist){
  array = array.contact(city.cityAreaList)
}

然后

_.groupBy(array,function(obj){
      return obj["firstLetter"];
  })

返回是一个object是大概是这种结构的

{
s:[
 {
   "areaCode":"1853","areaId": 372, ...},
 {...}
]
p:{
 ...
}
}

这个object的key就是你想要的"iniData"
剩下的事情就简单了

用Object.keys()获取object的所以key

let keys = Object.keys(object);
let newArr = [];
for(let key of keys){
newArr.push(
{
   "iniData":key,
   "cityAreaList":object[key]
}
)
}

这个newArr就是你想要的结果

这篇关于javascript - 怎么使用 Lodash /Js 进行按对象字段分组处理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆