Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.05.2020, 17:35
A_J A_J вне форума
Новичок на форуме
Отправить личное сообщение для A_J Посмотреть профиль Найти все сообщения от A_J
 
Регистрация: 08.07.2017
Сообщений: 1

Как удалить объект из массива изнутри самого объекта; и как передать this в forEach
Данные организованы так.
class Data{
 constructor(){
  var objects=[];
 }
 fillObjects(some_data){...}
 deleteObject(id){
  this.objects.splice(id,1);
 }
}

class Obj{
 ...
}

window.data=new Data();
data.fillObjects(getObjectsFromOutside()); // тут пополняется массив data.objects экземплярами Object

Экземпляры Obj из data.objects нужно удалять. Уже реализованный способ - метод Data.deleteObject(id) . Как удалить экземпляр изнутри, т.е. что написать в методе Obj.destructor(), не обращаясь к внешнему объекту?
Второй вопрос. В некотором методе класса Data имеются строки
this.objects.forEach(function(item,index){
 if(someCondition)
  window.data.deleteObject(index);
});

Проблема не только в том, что нельзя вызвать удаление элемента изнутри, но и указан в методе конкретный экземпляр Data, что совершенно криво. Сюда так просто не передаётся this, т.е. this.data.deleteObject(index) выдаст ошибку. Как передать ссылку на текущий объект внутрь forEach ?

Последний раз редактировалось A_J, 27.05.2020 в 17:45.
Ответить с цитированием
  #2 (permalink)  
Старый 27.05.2020, 18:59
Аватар для join
Профессор
Отправить личное сообщение для join Посмотреть профиль Найти все сообщения от join
 
Регистрация: 05.03.2012
Сообщений: 477

Сообщение от A_J
Как передать ссылку на текущий объект внутрь forEach ?
Можно использовать стрелочную функцию внутри .forEach: () => {}
Ответить с цитированием
  #3 (permalink)  
Старый 27.05.2020, 19:02
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

A_J,
мысли вслух ...
class Data{
 constructor(){
  this.objects=[];
 }
 fillObjects(some_data){this.objects.push(...some_data.map(a => (a.self = this, a)))}
 deleteObject(id){
  this.objects.splice(id,1);
 }
}

class Obj{
constructor(n){
  this.n = n;
 }
 destructor(){
  const id = this.self.objects.findIndex(a => a === this);
  this.self.deleteObject(id)
    }
}
const getObjectsFromOutside = arr => arr.map(n => new Obj(n))
window.data=new Data();
data.fillObjects(getObjectsFromOutside([6,9,0,5])); // тут пополняется массив data.objects экземплярами Obj

console.log(data.objects);

let elem = data.objects[2];
elem.destructor();

console.log(data.objects);
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как удалить повторные элементы из массива? YISHIMITSY Общие вопросы Javascript 1 04.05.2010 00:04
Как в событие объекта передать свойство метода DVVID Events/DOM/Window 8 22.02.2010 12:30
Объект как свойство объекта Cooskon Общие вопросы Javascript 6 16.02.2010 21:41
Как удалить элемент массива? velo Общие вопросы Javascript 2 05.02.2010 15:58
Можно ли получить имя экземпляра объекта внутри самого объекта? Ichigeki Общие вопросы Javascript 9 14.11.2008 19:00