我正在尝试将当前对象与id的数组进行比较。基本思想是,如果对象与recived ID数组中的任何内容具有相同的想法,那么我想设置一个选择的布尔值真正。我指的是使用一个带有indexOf里面的每一个的方向来检查。这是我的尝试 -
angular.forEach($scope.applicationsHere, function(index) {
if(data.applications.indexOf(index.id){
index.selected = true;
}
});
所以我要做的就是在这里针对data.applications检查应用程序。如果applicationsHere有一个对象,其.id与data.applications中的一个数字匹配(data.applications只是一个像[1,2,3]这样的id数组),那么将.selected设置为true。
我不相信我的逻辑是正确的,如果有人能帮助纠正我,我会非常感激。谢谢你的阅读!
答案 0 :(得分:2)
if(data.applications.indexOf(index.id){ // this is missing a parenthesis
此行具有以下实际行为(感谢@Pointy澄清所有选项)
true
false
true
根据您的问题,您的预期输出是:
false
true
如果您尝试使用JS' 0 = false
,其他任何事情都是真的,那么你可以这样做:
angular.forEach($scope.applicationsHere, function(index) {
if(data.applications.indexOf(index.id) + 1) {
index.selected = true;
}
});
或者,甚至更短:
angular.forEach($scope.applicationsHere, function(index) {
index.selected = (data.applications.indexOf(index.id) + 1);
});
话虽这么说,我仍然建议对indexOf进行实际的>= 0
检查。像这样的强制会导致其他人阅读代码时出现混淆,因为您使用索引作为布尔输出。如果您正在寻找紧凑性,也可以使用三元运算符。
angular.forEach($scope.applicationsHere, function(index) {
index.selected = data.applications.indexOf(index.id) >= 0 ? true : false;
});