Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.03.2018, 16:51
Новичок на форуме
Отправить личное сообщение для konstantin-921 Посмотреть профиль Найти все сообщения от konstantin-921
 
Регистрация: 10.03.2018
Сообщений: 5

Удаление нескольких объектов из массива
Добрый день!
Необходимо удалить из массива объектов все объекты с классом ".complited" по событию. Такая конструкция не справляется, видимо из-за смещения индексов при использовании .splice():

function deleteComplited() {
    
     	arrayTodo.forEach( function(element, index, array) {
    		if(element.classList.contains('complited')){
    			array.splice(index , 1);
    		}
    	});


Вариант c delete тоже не подходит, потому что в дальнейшем мне потребуется использовать длину массива. Подскажите рабочие решения. Перепробовал 3 варианта цикла, но все упирается в это смещение индексов из-за splice.
Ответить с цитированием
  #2 (permalink)  
Старый 10.03.2018, 17:26
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

konstantin-921,
если исходный массив не нужен, достаточно filter.
ниже вариант с сохранением.
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  .max{
    color: #008000;
     font-size: 2em;
  }
  .complited:after{
    content: " complited"
  }
  </style>


</head>

<body>
<div class="item">01</div>
<div class="item complited">02</div>
<div class="item">03</div>
<div class="item">04</div>
<div class="item">05</div>
<div class="item">06</div>
<div class="item">07</div>
<div class="item">08</div>
<div class="item">09</div>
<div class="item">10</div>
<div class="item complited">11</div>
<div class="item">12</div>
<div class="item complited">13</div>
<div class="item">14</div>
 <script>
var arrayTodo = [].slice.call(document.querySelectorAll(".item"));
function deleteComplited() {
  arrayTodo.reduceRight(function(array, element, index) {
    if (element.classList.contains("complited")) {
      array.splice(index, 1);
    }
    return array;
  }, arrayTodo) // далее для теста
  .forEach(function(element, index) {
    element.classList.add("max");
  });
};

deleteComplited()
  </script>
</body>
</html>
Ответить с цитированием
  #3 (permalink)  
Старый 10.03.2018, 17:45
Новичок на форуме
Отправить личное сообщение для konstantin-921 Посмотреть профиль Найти все сообщения от konstantin-921
 
Регистрация: 10.03.2018
Сообщений: 5

А если мне нужен исходный массив? Я из него рендерю все пункты списка, то есть он мне нужен, но уже без удаленных элементов с классом .complited.
Ответить с цитированием
  #4 (permalink)  
Старый 10.03.2018, 18:00
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

Сообщение от konstantin-921
А если мне нужен исходный массив?
не понял??? чем решение выше не устроило?
Ответить с цитированием
  #5 (permalink)  
Старый 10.03.2018, 18:16
Новичок на форуме
Отправить личное сообщение для konstantin-921 Посмотреть профиль Найти все сообщения от konstantin-921
 
Регистрация: 10.03.2018
Сообщений: 5

Ох, сорри) Сейчас сделал проверку состояния массива - все удалено корректно. Щас буду интегрировать все это в свое приложение. Спасибо за помощь)
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить определенный объект из массива объектов? Rmydar Общие вопросы Javascript 5 04.02.2018 18:16
перебор массива объектов phoenix200689 Общие вопросы Javascript 5 27.07.2017 09:42
Удаление элемента массива введенного с клавиатуры. Alex961 Общие вопросы Javascript 1 01.12.2015 22:39
Конструктор массива объектов и работа с ними через localStorage pepel266 Общие вопросы Javascript 16 04.11.2015 18:30
Вызов свойств объектов из массива или объекта с параметрами Sanu0074 jQuery 4 22.05.2015 10:18