typescript / javascript array.filter () с несколькими условиями, не возвращающими ожидаемые значения - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть определение ячейки с двумя свойствами:

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 ]

2 голосов
/ 25 апреля 2020

Вы ошиблись логикой c. Чтобы сопоставить с Cell(5,5), вы используете

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

Но для его фильтрации вы используете отрицательное значение:

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

, что совпадает с

c => c.x !== 5 || c.y !== 5
0 голосов
/ 25 апреля 2020

Ваш вопрос немного смутил, я пишу это исходя из своего предположения.

Вы хотите вернуть последние две ячейки, но это условие было противоречивым, поскольку последние ячейки имеют значение 5 в качестве значения x, поэтому вы можете проверить это условие, чтобы вернуть последние две ячейки.

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

Во втором условии я использовал больше, чем оператор, чтобы получить желаемые результаты.

Если вы нашли это неправильно, дайте мне знать, я помогу.

...