我正在尝试使用lodash指望一些数组/对象。
我需要计算具有相同基点的数组的长度。我正在使用lodash countBy
和property
。
我正在这样做:
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
的属性执行相同的操作,该属性仅随0
和1
一起提供。但是我无法按照适当的逻辑来完成它:
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
。
有什么想法吗?
答案 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>