sort对象嵌套并且不是数组

时间:2018-04-17 13:47:42

标签: javascript json sorting

我搜索如何按place.city这种具有密钥id的对象进行排序。需要保留第一把钥匙的ID ......

我尝试了不同的方法,但我总是失败,键太多了。

我无法改变这个对象,这个可怜的架构是由API get返回的,我没有动手。

{
    "123": {
      0: {
        "place": {
            "city": "New York",
            "country": "USA" 
        },
        "person": {
            "name": "Bob",
            "age": 45
        }
      },
      1: {
        "place": {
            "city": "New York",
            "country": "USA" 
        },
        "person": {
            "name": "James",
            "age": 32
        }
      }
    },
    "456": {
      0: {
        "place": {
            "city": "Chicago",
            "country": "USA" 
        },
        "person": {
            "name": "Louis",
            "age": 34
        }
      },
      1: {
        "place": {
            "city": "Chicago",
            "country": "USA" 
        },
        "person": {
            "name": "Christine",
            "age": 65
        }
      }
    },
    "789": {
      0: {
        "place": {
            "city": "Dallas",
            "country": "USA" 
        },
        "person": {
            "name": "Kevin",
            "age": 27
        }
      },
      1: {
        "place": {
            "city": "Dallas",
            "country": "USA" 
        },
        "person": {
            "name": "Robert",
            "age": 55
        }
      },
      2: {
        "place": {
            "city": "Dallas",
            "country": "USA" 
        },
        "person": {
            "name": "Danny",
            "age": 62
        }
      }
    }
}

这种过滤器无法按预期工作,因为我猜第二个位置的键... var sortedByPlace = _.sortBy(Object.keys(data).map(k => ({id:k, ...data[k]})), (d)=> d.place.city)

1 个答案:

答案 0 :(得分:0)

你可以用

做到这一点
var transformed = _.sortByOrder(obj, (e)=> { 

if(e.place){

return e.place.city

}else{
return e.name
}
}, ['asc']);

结果将是您排序对象的数组。

然后你可以运行

var mySortedArr = []
_.each(kkk,(val,key)=>{
   _.each(val,(innerVal,innerKey)=>{
    mySortedArr.push(innerVal)
   })

})