我有一个场景,比如我想要显示只有一个数组中可用的内容,如果它出现在另一个数组中则不需要显示它。
我的HTML就像
<div ng-repeat="array1Value in array1">
<div ng-repeat="array2Value in array2">
<div ng-if="isNotFound(array1,array2Value.id)">
<span>{{array2Value.name}}</span>
</div>
</div>
</div>
我的js类就像
var app = angular.module("MyApp",{});
app.controller("MyController",function($scope) {
$scope.array1 = [
{
id:"1",name:"one"
},
{
id:"2",name:"two"
},
{
id:"3",name:"three"
}
];
$scope.array2 = [
{
id:"1",name:"one"
},
{
id:"2",name:"two"
},
{
id:"4",name:"four"
}
];
$scope.alreadyPrinted = [{}];
$scope.isNotFound = function(array,value){
for(i = 0; i < array.length; i++){
if (value === array[i].id) {
return false;
}
}
if($scope.alreadyPrinted.indexOf(value) > -1){
return false;
} else {
$scope.alreadyPrinted.push(value);
return true;
}
}
});
我只需要四个输出。但截至目前,一切都没有到来。请帮我纠正这个问题。
答案 0 :(得分:1)
你需要删除外部循环...试试这个:
<div ng-repeat="array2Value in array2">
<div ng-if="isNotFound(array1,array2Value.id)">
<span>{{array2Value.name}}</span>
</div>
</div>
答案 1 :(得分:1)
如果我理解正确,如果值不在第一个数组中,则希望返回True。
尝试使用isnotFound函数:
format(dateserial(year(now()),month(now()),day(now())),"mmddyy")
或者甚至更好:
$scope.isNotFound = function(array,value){
for(i = 0; i < array.length; i++){
if (value !== array[i].id) {
return true;
}
}
return fase;
}
我不确定你为什么要重复第一个数组和allreadyPrinted部分。你的HTML可以是:
$scope.isNotFound = function(array,value){
angular.forEach(array, function(item){
if (value !== item.id) {
return true;
}
});
return fase;
}
答案 2 :(得分:0)
我认为您已经打印过的代码存在问题。您的代码显示“四”作为输出。尝试在代码中插入一个警告框,如
{{1}}
您将在浏览器中看到“四个”输出,但仅限一次迭代。 更正已打印的code.alert框将帮助您隔离问题。