Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何防止筛选器生成空数组? 函数addSelected(id){ var feedFound=false; var selList=[]; 对于(var i=0;i0){ 对于(var j=0;j_Javascript_Angularjs - Fatal编程技术网

Javascript 如何防止筛选器生成空数组? 函数addSelected(id){ var feedFound=false; var selList=[]; 对于(var i=0;i0){ 对于(var j=0;j

Javascript 如何防止筛选器生成空数组? 函数addSelected(id){ var feedFound=false; var selList=[]; 对于(var i=0;i0){ 对于(var j=0;j,javascript,angularjs,Javascript,Angularjs,这就是我如何通过过滤将元素从一个列表添加到另一个列表的方法。问题是,对于每个过滤元素,我都会返回一个空数组。是否还有其他方法可以解决此问题?如果在数组中只查找一项,请使用find()而不是filter() PS:find可能返回null,因此您应该始终进行null检查 例如: function addSelected(id) { var feedFound = false; var selList = [] ; for (var i = 0; i

这就是我如何通过过滤将元素从一个列表添加到另一个列表的方法。问题是,对于每个过滤元素,我都会返回一个空数组。是否还有其他方法可以解决此问题?

如果在数组中只查找一项,请使用find()而不是filter()

PS:find可能返回null,因此您应该始终进行null检查

例如:

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;
    }

你能解释一下你想用这些代码解决什么问题吗?当我把元素添加到另一个列表中,然后我就可以删除它了。当我移除该元素时,应该使用unshift方法将其恢复到以前的位置。它可以工作,但只显示一个空元素。我希望您现在明白了,您可以向测试添加数据吗..对不起,这是不可能的
vm.feeds[I]=vm.feeds.filter(函数(项){return item.id==vm.feeds[I].id;})似乎是一个问题。。不应该是..`vm.feeds=vm.feeds.filter((项)=>item.id==feed.id)`这是一个很好的方法,但我使用过滤器的原因是临时删除我以前单击的元素,它应该稍后返回到它的位置。这对我没什么帮助,你的方法和这个没有区别。@ChampagneSupernova你能检查逻辑吗。.只找到它找到的第一个元素。如果你什么都没有得到,你就把其他元素都去掉了,对吗?这是有区别的。使用过滤器,单击元素,它将从列表1移动到列表2,并且不再显示在列表1中。使用“查找”,元素将保留在列表1中,并且现在在列表2中也可见。我不需要它在数组中可见。找不到。你想让代码做什么?因为您询问了如何防止筛选器返回空数组?
const foundItem = vm.feeds.find(function(item) {
                    return item.id === vm.feeds[i].id;
                });

if (foundItem) {
    vm.feeds[i] = foundItem
}