【问题标题】:How can I destructure an Array to get the length of certain values inside of it如何解构数组以获取其中某些值的长度
【发布时间】:2019-02-20 20:23:51
【问题描述】:

我正在尝试使用 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。如果pickup包含01,我需要知道基点是N

有什么想法吗?

【问题讨论】:

  • 1passengersGoingNorthPickup 1: passengersGoingNorthPickup 的目的和预期结果是什么?您能否在问题中包含完整的输入数组和预期结果?见stackoeverflow.com/help/mcve
  • 如果有3 乘客去West 和2 有pickup: 1,这是一个计数。所以passengersGoingNorthPickup === 2@guest271314
  • 很少有使用 lodash 的经验。你的意思是cardinalPoint === "W" && pickup === 1?还是只有pickup === 1?唯一的预期结果是输入数组中与属性名称和值匹配的对象的.length
  • 嗯...阅读您上一个问题的其他答案怎么样?那你根本不会有这个问题。或者你没问过this
  • 请张贴filterByCardinalPoint的作用

标签: javascript ecmascript-6 lodash


【解决方案1】:

更改条件,因此只有具有真值(在这种情况下不是 0)pickup 值的项目将计入它们的 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-23
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多