Maison  >  Questions et réponses  >  le corps du texte

javascript - Comment utiliser Lodash/Js pour regrouper des champs par objet

objet 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:"香港特别行政区"
   }]


]

Obtenez les résultats suivants. . Le regroupement est basé sur le champ cityAreaList : firstLetter

{
   "iniData":"S",
   "cityAreaList":[
        {
          "areaCode":"1853","areaId": 372, ...
        },
        {...}
    ]
}
曾经蜡笔没有小新曾经蜡笔没有小新2711 Il y a quelques jours617

répondre à tous(1)je répondrai

  • PHP中文网

    PHP中文网2017-05-19 10:47:12

    lodash ne devrait pas avoir de fonction en une seule étape

    Mais il existe une fonction groupBy qui peut être utilisée pour regrouper

    Vous pouvez utiliser une boucle pour combiner la cityAreaList de toutes les villes dans un tableau

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

    puis

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

    L'objet renvoyé est à peu près de cette structure

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

    La clé de cet objet est le "iniData" que vous souhaitez
    Le reste est simple

    Utilisez Object.keys() pour obtenir toutes les clés de l'objet

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

    Ce nouvelArr est le résultat que vous souhaitez

    répondre
    0
  • Annulerrépondre