Я пытаюсь создать подкласс массива javascript. Я хочу инициировать подкласс с аргументом типа массива и добавить метод для удаления элемента из массива (подкласса).
Мой код выглядит так:
class CustomArray extends Array {
constructor(array) {
console.log('Initiating array:', array)
super(...array);
}
remove(element) {
let index = this.indexOf(element);
if (index > -1) {
return this.splice(index, 1);
}
return [];
}
}
var a = ['a', 'b', 'c', 'd', 'e'];
var list = new CustomArray(a)
console.log('list:', list);
console.log('remove:', list.remove('c'));
console.log('list:', list);
Проблема в том, что когда я вызываю .splice( ) он удаляет элемент из массива, но также возвращает массив удаленных элементов, на самом деле он возвращает новый экземпляр моего подкласса CustomArray, который должен быть инициирован с аргументом типа массива, но .splice() инициирует его с аргументами целого числа тип.
Вот пример того, что, по моему мнению, происходит, когда я вызываю .splice():
Допустим, у нас есть экземпляр list
класса CustomArray
, инициированный с аргументом ['a','b','c','d','e']
, а затем мы вызываем метод list.remove('c')
. (Точно так же, как в фрагменте кода).
Метод remove
класса CustomArray
проверяет, находится ли индекс c
в массиве ['a','b','c','d','e']
, то есть 2
, а затем вызывает method this.splice(2,1)
, который должен удалить 1 элемент по индексу 2 в массиве ['a','b','c','d','e']
. Метод splice
удаляет элемент c
из массива формы, но также возвращает что-то вроде new CustomArray(1)
, потому что один элемент был удален из массива формы, поэтому он пытается создать массив длины 1, но это не удается, потому что класс CustomArray
является ожидаемым массивом.
Я хочу, чтобы метод splice
не инициировал новый экземпляр класса CustomArray
и вместо этого возвращал обычный массив (экземпляр объекта Array).
++index;
). - person T.J. Crowder   schedule 18.03.2018++index
, но я использовал цикл for вместо while. И это CustomArray, я отредактировал это в вопросе. - person ands   schedule 19.03.2018constructor
не работает. - person Bergi   schedule 17.12.2019