Метод для удаления объект из массива

Возможно это покажется глупым вопросом, но у меня есть массив в котором храняться объекты, естественно одного и того же класса. Никаких идентификаторов у них нет, так как добавление объекта в массив происходит непосредственно внутри класса. Так как теперь сделать так, чтобы один из наших методов, удалял нужный объект? Нужно сказать, что каждый объект имеет свои координаты, потаму что каждому совпадает какой-то элемент из матрицы. Объект должен удаляться с помощу метода die

herbivArr = []

class Herbivore{
    constructor(x, y){
        this.x = x
        this.y = y
        this.energy = 4
        this.direction = []
        // объект "двигается", меняя соответствующий ей элемнт из матрицы, поэтому нужно обновлять координаты(функция ещё не сделана)
        /*function updateDirection(){
            this.direction = [
                [this.x-1, this.y-1],
                [this.x-1, this.y],
                [this.x-1, this.y+1],
                [this.x, this.y-1],
                [this.x, this.y+1],
                [this.x+1, this.y-1],
                [this.x+1, this.y],
                [this.x+1, this.y+1]
            ]
        }*/
        matrix[this.y][this.x] = 2
    }
    // исследует соседние(как по Х так и по Y) элементы из матрицы, и добавляет координаты  нухных ему элементов в массив
    chooseCell(ch){
        //updateDirection()    Здесь должны обновляться координаты объекта
        var result = []
        for (let i in this.sides) {
            let x = this.sides[i][0]
            let y = this.sides[i][1]
            if (x >= 0 && y >= 0 && x <= matrix.length-1 && y <= matrix.length-1) {
                if (ch == matrix[y][x]) {
                    result.push(this.sides[i])
                }
            }
        }

        return(result)
    }
    // создаёт новый объект с координатами рандомного, свободного, соседнего элемента из матрицы, и добавляет его в массив
    mul(){
        this.energy++
        

        let emptyCells = this.chooseCell(0)
        let randCell = random(emptyCells)
    
        
        if (this.energy >= 12 && randCell){
            let x = randCell[0]
            let y = randCell[1]

            matrix[y][x] = 2
            let hv = new Herbivore(x, y)
            herbivArr.push(hv)
            this.energy = 0
        } else {
            // Здешний код не важен
        }
    }
    // должен удалить объект, но писать 0 не правильно, он будет удалять первый из созданных объектов
    die(){
        herbivArr.splice(0, 1)
    }
}


hv = new Herbivore(1, 2)
herbivArr.push(hv)

for(let i in herbivArr) {
    herbivArr[i]./*какой-то метод*/()
}

Если что, это нечто на подобии "the game of life"


Ответы (2 шт):

Автор решения: OPTIMUS PRIME
die () {
  let index = herbivArr.indexOf(this);
  if (index != -1) herbivArr.splice(index, 1);
}

if (index != -1) — эта проверка важна, чтобы не получилось splice(-1, 1), который удалит последний элемент массива.

Т.к. это может оказаться довольно частой операцией, можно также сделать "библиотечную" функцию:

const lib = {
  removeElem: function(arr, elem) {
    let index = arr.indexOf(elem);
    if (index == -1) return false;

    arr.splice(index, 1);
    return true;
  },
};

// И вызывать

die() {
  lib.removeElem(herbivArr, this);
}
→ Ссылка
Автор решения: dvtpetrosyan
for(index in herbivArr){
    if (herbivArr[index].x == this.x && herbivArr[index].y == this.y) {
        herbivArr.splice(index, 1)
    }
}
matrix[this.y][this.x] = 0 
→ Ссылка