как помешать фильтру сделать пустой массив? - PullRequest
0 голосов
/ 28 апреля 2020
function addSelected(id) {
        var feedFound = false;
        var selList = [] ;
        for (var i = 0; i < vm.feeds.length; i++) {
            if (vm.feeds[i].id == id) {
                if (vm.rationList.length > 0) {
                    for (var j = 0; j < vm.rationList.length; j++) {
                        if (vm.feeds[i].id == vm.rationList[j].id) {
                            feedFound = true;
                            break;
                        }
                    }
                }
                if (!feedFound) {
                    selList.push(vm.feeds[i]);
                    vm.feeds[i] = vm.feeds.filter(function(item) {
                        return item.id === vm.feeds[i].id;

                    });
                }
                feedFound = false;
            }
        }
        var li = [];
        angular.copy(selList, li);
        for (var i = 0; i < li.length; i++) {
            vm.rationList.push(li[i]);
        }
        vm.rationListSafe = vm.rationList;
    }

Так я добавляю элементы из одного списка в другой с фильтрацией. Проблема в том, что для каждого фильтруемого элемента я получаю пустой массив. Есть ли в любом случае, я могу решить это?

1 Ответ

0 голосов
/ 28 апреля 2020

Если вы ищете только один элемент в вашем массиве, используйте find () вместо filter ()

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find

PS: поиск может вернуть null, поэтому вы всегда должны проверять null

Пример:

const foundItem = vm.feeds.find(function(item) {
                    return item.id === vm.feeds[i].id;
                });

if (foundItem) {
    vm.feeds[i] = foundItem
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...