比较angularJs中的两个列表
我有两个从两个不同的json对象创建的列表:比较angularJs中的两个列表,angularjs,Angularjs,我有两个从两个不同的json对象创建的列表: <ul ng-repeat="a in user.data"> <li> <md-checkbox> {{ a.name }} </md-checkbox> </li> </ul> {{a.name}} 以及: {{x.user.name} 我必须比较两个列表并删除与{{job.u
<ul ng-repeat="a in user.data">
<li>
<md-checkbox>
{{ a.name }}
</md-checkbox>
</li>
</ul>
-
{{a.name}}
以及:
-
{{x.user.name}
我必须比较两个列表并删除与
{{job.user.name}}
相同的{{a.name}}
。比较具有不同结构的json对象很困难。如何比较这两个列表并删除重复的项目?类似的内容应该会有所帮助:
for(i=0; i<user.data.length;i++){
for(j=0; j<job.data.length;j++){
if(user.data[i].name === job.data[j].name){
user.date.splice(i,1);
}
}
}
for(i=0;i类似的内容应该有帮助:
for(i=0; i<user.data.length;i++){
for(j=0; j<job.data.length;j++){
if(user.data[i].name === job.data[j].name){
user.date.splice(i,1);
}
}
}
对于(i=0;i您可以通过过滤一个数组创建一个新数组:
var newArray = job.data.filter(function(jobData) {
return user.data.some(function(userData) {
return userData.name === jobData.user.name;
});
});
您可以通过过滤其中一个阵列来创建新阵列:
var newArray = job.data.filter(function(jobData) {
return user.data.some(function(userData) {
return userData.name === jobData.user.name;
});
});
您可以在表达式参数中使用函数而不是字符串来使用filter
filter;)。请记住这是filter
{{ filter_expression | filter : expression : comparator}}
表达式
可以是字符串、对象或函数
$scope.filterUnemployed = function(value) {
var jobs = $scope.job.data;
for (var i = 0; i < jobs.length; i++) {
// Search every object in the job.data array for a match.
// If found return false to remove this object from the results
if (jobs[i].user.name === value.name) {
return false;
}
}
// Otherwise return true to include it
return true;
}
请注意,这不会修改原始集合,但会在html中显示新副本,因为这通常是所需的效果
检查示例是否有可用的演示
angular.module('app',[])
.controller('SampleCtrl',函数($scope){
$scope.user={
数据:[{
名字:“约翰”
}, {
名字:“玛丽”
}, {
名字:“彼得”
}, {
名字:“杰克”
}, {
姓名:“理查德”
}, {
姓名:“伊丽莎白”
}]
};
$scope.job={
数据:[{
职位名称:“首席执行官”,
用户:{
名字:“约翰”
}
}, {
职位名称:“首席财务官”,
用户:{
名字:“玛丽”
}
}, {
职位名称:'分析学家',
用户:{
名字:“杰克”
}
}]
};
$scope.filterUnemployed=函数(值){
var jobs=$scope.job.data;
对于(变量i=0;i
所有用户
-
{{a.name}}
失业用户
-
{{a.name}}
雇佣
-
{{x.user.name}
您可以在expression参数中使用函数而不是字符串来使用过滤器。记住这是filter
{{ filter_expression | filter : expression : comparator}}
表达式可以是字符串、对象或函数。这样就行了
$scope.filterUnemployed = function(value) {
var jobs = $scope.job.data;
for (var i = 0; i < jobs.length; i++) {
// Search every object in the job.data array for a match.
// If found return false to remove this object from the results
if (jobs[i].user.name === value.name) {
return false;
}
}
// Otherwise return true to include it
return true;
}
请注意,这不会修改原始集合,但会在html中显示新副本,因为这通常是所需的效果
检查示例是否有可用的演示
angular.module('app',[])
.controller('SampleCtrl',函数($scope){
$scope.user={
数据:[{
名字:“约翰”
}, {
名字:“玛丽”
}, {
名字:“彼得”
}, {
名字:“杰克”
}, {
姓名:“理查德”
}, {
姓名:“伊丽莎白”
}]
};
$scope.job={
数据:[{
职位名称:“首席执行官”,
用户:{
名字:“约翰”
}
}, {
职位名称:“首席财务官”,
用户:{
名字:“玛丽”
}
}, {
职位名称:'分析学家',
用户:{
名字:“杰克”
}
}]
};
$scope.filterUnemployed=函数(值){
var jobs=$scope.job.data;
对于(变量i=0;i
所有用户
-
{{a.name}}
失业用户
-
{{a.name}}
雇佣
-
{{x.user.name}
您可以使用vanilla javascript或库
请查看相关链接:
您可以使用vanilla javascript或库
请查看相关链接:
删除是指过滤?对吗?修改您的原始集合将涉及与angular本身无关但与普通javascript相关的代码?对吗?修改原始集合将涉及与angular本身无关但与普通javascript相关的代码。