【问题标题】:typescript / javascript array.filter() with multiple conditions not returning expected valuestypescript / javascript array.filter() 有多个条件不返回预期值
【发布时间】:2020-08-08 22:30:18
【问题描述】:

我有两个属性的单元格定义:

class Cell {
  x: number;
  y: number;

  constructor(x: number, y: number) {
    this.x = x;
    this.y = y;
  }
}

让我们创建包含一些单元格的新数组:

let x : Cell[]=[new Cell(5,5),new Cell(5,9), new Cell(5,56)]

我想过滤一个单元格(如果存在于数组中,并返回数组的其余部分):

x= x.filter(c=>(c.x!==5 && c.y!==5)

我希望返回包含 2 个最后一个单元格的数组,但它没有返回任何单元格。如果只使用一种条件,它就可以正常工作。多种情况的解决方案?

【问题讨论】:

  • 这些单元格中没有一个符合您的条件,不清楚您为什么认为您会得到最后两个。

标签: javascript arrays typescript filter


【解决方案1】:

你的逻辑错了。为了匹配 Cell(5,5) 你使用

c => c.x === 5 && c.y === 5

但要过滤掉它,你使用否定:

c => !(c.x === 5 && c.y === 5)

相同
c => c.x !== 5 || c.y !== 5

【讨论】:

  • 是的,发现有逻辑错误。这就是我想要实现的。谢谢!
【解决方案2】:

您的问题有点令人困惑,我是根据我的假设来写这篇文章的。

您想返回最后两个单元格,但该条件是矛盾的,因为最后一个单元格的 x 值为 5,因此您可以检查此条件以返回最后两个单元格。

x= x.filter(c=>(c.x == 5 && c.y > 5))

在第二个条件中,我使用了大于运算符来得到想要的结果。

如果您发现这不正确,请告诉我,我会提供帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-28
    • 1970-01-01
    • 2022-06-30
    • 2018-03-29
    • 1970-01-01
    • 2013-03-22
    • 2012-02-04
    相关资源
    最近更新 更多