当属性位于另一个对象中时,如何将_.groupBy js用于组对象-TypeScript

时间:2018-11-21 14:28:28

标签: javascript angular typescript underscore.js

我有关注对象

var cars = [
 {
    'make': 'audi',
    'model': 'r8',
    'year': '2012',
    location: {
       'city': 'A',
       'state': 'X',
       'country': XX'
    }
}, {
    'make': 'audi',
    'model': 'rs5',
    'year': '2013',
    location: {
       'city': 'D',
       'state': 'X',
       'country': XX'
    }
}, {
    'make': 'ford',
    'model': 'mustang',
    'year': '2012',
    location: {
      'city': 'A',
      'state': 'X',
      'country': XX'
    }
}, {
    'make': 'ford',
    'model': 'fusion',
    'year': '2015',
    location: {
      'city': 'A',
      'state': 'X',
      'country': XX'
    }
}, {
    'make': 'kia',
    'model': 'optima',
    'year': '2012',
    location: {
      'city': 'C',
      'state': 'X',
      'country': XX'
    }
},

];

我想要按城市分组的车。

所以我正在使用下划线js,但是我不知道如何访问属性中的其他对象。我正在尝试做,但是没有用。

var groups = _.groupBy(cars, 'location.city');

你能帮我吗?

谢谢

2 个答案:

答案 0 :(得分:3)

您可以将_.property与属性的路径一起使用进行分组。该函数返回路径的闭包,并重新调整一个函数,该函数使用一个对象来获取(嵌套)属性。

  

_.property(path)

     

返回一个函数,该函数将返回任何传入对象的指定属性。可以将path指定为简单键,或者指定为对象键或数组索引的数组,以进行深度属性提取。

var cars = [{ make: 'audi', model: 'r8', year: '2012', location: { city: 'A', state: 'X', country: 'XX' } }, { make: 'audi', model: 'rs5', year: '2013', location: { city: 'A', state: 'X', country: 'XX' } }, { make: 'ford', model: 'mustang', year: '2012', location: { city: 'C', state: 'X', country: 'XX' } }, { make: 'ford', model: 'fusion', year: '2015', location: { city: 'B', state: 'X', country: 'XX' } }, { make: 'kia', model: 'optima', year: '2012', location: { city: 'A', state: 'X', country: 'XX' } }],
    groups = _.groupBy(cars, _.property(['location', 'city']));

console.log(groups);
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore-min.js"></script>

答案 1 :(得分:2)

Nina的答案对于javascript实现是正确的,但是我需要使用打字稿来实现,因此,我为我的问题提供了一种解决方案。

对我有用:

 let groups = _.groupBy(this.cars, car => car.location.city);