@MaesTro544

Как достать из массива индекс удаленного объекта?

Есть массив arr с определенным количеством чисел. По нажатию из него удаляются некоторые объекты (в случайном порядке). Когда элемент удаляется, то в консоли по его индексу выдается undefined, поэтому я решил определять удаленный элемент по нему. Нужно достать из него индексы всех удаленных элементов и записать их в массив arr1 , но в моем случае выдает не индекс, а [object Object]. Как быть?
И да, удалять элементы методом 'delete' было необходимостью, поэтому сменить метод на splice не вариант.
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let arr1 = [];
let index;

delete arr[3, 6, 9];
arr.forEach((item, index, array) => {

    if ({ item } = 'undefined') {
        index = { index };
        arr1.unshift(index);
        alert(index);            //возвращает [object Object], а нужен индекс
    };
});
  • Вопрос задан
  • 78 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Массивы с пустыми слотами называются sparse arrays. Разные методы массивов по-разному обходятся с пустыми слотами: более новые их считают undefined, старые методы пропускают.

Топорное решение: собрать индексы присутствующих элементов, и сравнить с полным диапазоном индексов:
const arr = [1,2,3,4,5,6,7,8,9];
delete arr[1];
delete arr[3];
delete arr[5];
// arr == [ 1, <1 empty slot>, 3, <1 empty slot>, 5, <1 empty slot>, 7, 8, 9 ]

const present = [];
arr.forEach((_, i) => present.push(i));
// present == [ 0, 2, 4, 6, 7, 8 ]

const empty = Array.from({ length: arr.length }, (_, i) => i) // [0,1,2,3,4,5,6,7,8]
  .filter(i => !present.includes(i));
// empty == [ 1, 3, 5 ]
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@historydev Куратор тега JavaScript
Валера, настало твоё время
function delete_elements(arr, index_start, index_end) {
	const array = [...arr].splice(index_start, index_end);
	return array.map(el => arr.indexOf(el));
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы