Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Удаление элементов из массива (https://javascript.ru/forum/css-html/57081-udalenie-ehlementov-iz-massiva.html)

Noin 18.07.2015 17:03

Удаление элементов из массива
 
Добрый день!

Есть следующая ситуация:
При загрузке страницы получаем массив данных myData. (получаю так:
var myData = <?php echo json_encode($data, JSON_PRETTY_PRINT) ?>;
)

и есть функция:
function setFilters(oldData) {

    var i = 0;
    var newItems = oldData;

    if (document.getElementById("isFreeFilter").checked){
        for (i = (newItems.length - 1); i >= 0; i--) {
            if (newItems[i].isFree != '1') {
                newItems.splice(i, 1);
            }
        }
    }
}


html:
<input id="isFreeFilter" type="checkbox" name='chb1' value="1" onChange="setFilters(myData)">


Собственно проблема заключается в удалении через splice элементов массива newItems. Как только выполняется строчка
newItems.splice(i, 1);
- нужный элемент удаляется не только из массива newItems, но и из myData. Как такое вообще может быть и как это можно избежать?

рони 18.07.2015 17:16

Noin,
создание дубликата массива
var newItems = oldData.slice();

Noin 18.07.2015 17:34

Цитата:

Сообщение от рони (Сообщение 380283)
Noin,
создание дубликата массива
var newItems = oldData.slice();

Спасибо.
Получается если делать просто
var newItems = oldData;
создаётся ссылка на исходный массив?

Safort 18.07.2015 17:37

Noin,
да. В учебнике на этом сайте довольно подробно про это написано.


Часовой пояс GMT +3, время: 09:54.