Невозможно отфильтровать массив после удаления элемента в методе класса - PullRequest
2 голосов
/ 26 мая 2020

Я не могу отфильтровать свой массив с помощью функции фильтрации. Необходимо получить обновленный фильтрованный массив. Если я смогу каким-то образом обновить его, дайте мне знать, что я могу изменить в коде.

class Store {
  constructor(items) {
    this._items = items;
  }
  getItems() {
    return this._items;
  }
  addItem(item) {
    this._items.push(item); 
    return this._items;
  }
  removeItem(item) {
    this._items.filter(value => value != item);
    return this._items;
  }
}

let storage = new Store([
  'Cubbage',
  'Garlice',
  'Sauce',
  'Tomato',
]);

let items = storage.getItems(); 
console.table(items);

storage.addItem('banana'); 
console.table(items);

storage.removeItem('Tomato');
console.table(items); // 

Ответы [ 3 ]

3 голосов
/ 26 мая 2020

Метод filter() создает новый массив со всеми элементами, которые проходят проверку, реализованную предоставленной функцией.

Итак, вам нужно либо установить this._items как:

removeItem(item) {
    this._items = this._items.filter(value => value != item);
    return this._items;
}

Или просто верните метод this._items.filter(), например:

removeItem(item) {
    return this._items.filter(value => value != item);
}

class Store {
  constructor(items) {
    this._items = items;
  }
  getItems() {
    return this._items;
  }
  addItem(item) {
    this._items.push(item);
    return this._items;
  }
  removeItem(item) {
    this._items = this._items.filter(value => value != item);
    return this._items;
  }
}

let storage = new Store(['Cubbage','Garlice','Sauce','Tomato']);

storage.addItem('banana');
let items = storage.removeItem('Tomato');
console.log(items); //
2 голосов
/ 26 мая 2020

Ну, .filter() не меняет ваш массив, он просто создает новый массив. вам нужно назначить его вашему массиву.

this._items = this._items.filter(value => value != item);

Чтобы удалить один элемент, вы также можете использовать .splice()

  removeItem(item) {
    this._items.splice(this._items.indexOf(item), 1);
    return this._items;
  }
1 голос
/ 26 мая 2020

.filter создает новый массив, но не изменяет существующий. Попробуйте это:

class Store {
    constructor(items) {
      this._items = items;
    }
    getItems() {
      return this._items;
    }
    addItem(item) {
      this._items.push(item);
      return this._items;
    }
    removeItem(item) {
      const res =this._items.filter(value => value != item);
      return res;
    }
  }

  let storage = new Store([
    'Cubbage',
    'Garlice',
    'Sauce',
    'Tomato',
  ]);

  let items = storage.getItems();
  console.table(items);

  storage.addItem('banana');
  console.table(items);

  storage.removeItem('Tomato');
  console.table(items);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...