我怎样才能解构一个数组以获取其中的某些值的长度

时间:2019-02-20 20:23:51

标签: javascript ecmascript-6 lodash

我正在尝试使用lodash指望一些数组/对象。 我需要计算具有相同基点的数组的长度。我正在使用lodash countByproperty

我正在这样做:

let passengersGoingNorth = 0;
let passengersGoingEast = 0;
let passengersGoingSouth = 0;
let passengersGoingWest = 0;
...

   ({
      N: passengersGoingNorth,
      S: passengersGoingSouth,
      W: passengersGoingWest,
      E: passengersGoingEast,
    } = countBy(passengersData, property('cardinalpoint')));

它返回具有相同基点的每个元素的长度。冷杉示例N返回2

现在,我需要对名为pickup的属性执行相同的操作,该属性仅随01一起提供。但是我无法按照适当的逻辑来完成它:

let passengersGoingNorthPickup = 0;
let passengersGoingEastPickup = 0;
let passengersGoingSouthPickup = 0;
let passengersGoingWestPickup = 0;

   ({
      1: passengersGoingNorthPickup,
      passengersGoingSouthPickup,
      passengersGoingWestPickup,
      passengersGoingEastPickup,
    } = countBy(passengersData, property('pickup')));

我总共有5个元素,pickup: 1来自上面,而我的操作方式却行不通。 在对象中。

这是数组的来源:

[
{
  "cardinalpoint": "E"
  "pickup": 1,,
  "id": 6,
  "phone": "99998888",
},
{
  "cardinalpoint": "N"
  "pickup": 0,,
  "id": 1,
  "phone": "777777",
},
]

更新 在我这样做之前,它确实起作用,但是函数被调用了太多次,但这就是这个主意:

passengersWithPickup = this.filterByCardinalPoint(
      passengersData,
      'pickup',
      1,
    );

    passengersGoingNorthPickup = this.filterByCardinalPoint(
      passengersWithPickup,
      'cardinalpoint',
      'N',
    ).length;
    passengersGoingSouthPickup = this.filterByCardinalPoint(
      passengersWithPickup,
      'cardinalpoint',
      'S',
    ).length;
    passengersGoingWestPickup = this.filterByCardinalPoint(
      passengersWithPickup,
      'cardinalpoint',
      'W',
    ).length;
    passengersGoingEastPickup = this.filterByCardinalPoint(
      passengersWithPickup,
      'cardinalpoint',
      'E',
    ).length;

因此,我想对这两件事使用相同的逻辑。但是我需要根据基点获取皮卡是0还是1。就像我需要知道基本点是N是拾取器包含0还是1

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

更改条件,因此只有值为pickup为真的项目(在这种情况下为0)才会计入其cardinalpoint的值之下。

如果要在销毁之前查看对象,您会看到pickup值为0的项目计入0键下。

const { countBy, property } = _;

let passengersGoingNorth, passengersGoingSouth, passengersGoingWest, passengersGoingEast;

const passengersData = [{"cardinalpoint":"E","pickup":1,"id":6,"phone":"99998888"},{"cardinalpoint":"N","pickup":0,"id":1,"phone":"777777"}];

({
  N: passengersGoingNorth = 0,
  S: passengersGoingSouth = 0,
  W: passengersGoingWest = 0,
  E: passengersGoingEast = 0
} = countBy(passengersData, o => o.pickup && o.cardinalpoint ));

console.log(passengersGoingNorth, passengersGoingSouth, passengersGoingWest, passengersGoingEast); // 0, 0, 0, 1
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

相关问题