Javascript,使用indexOf比较对象

时间:2014-11-03 16:04:27

标签: javascript angularjs

我正在尝试将当前对象与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。

我不相信我的逻辑是正确的,如果有人能帮助纠正我,我会非常感激。谢谢你的阅读!

1 个答案:

答案 0 :(得分:2)

if(data.applications.indexOf(index.id){ // this is missing a parenthesis

此行具有以下实际行为(感谢@Pointy澄清所有选项)

  1. 未找到(-1)= true
  2. 第一元素(0)= false
  3. 任何其他元素(1到n)= true
  4. 根据您的问题,您的预期输出是:

    1. 未找到(-1)= false
    2. 找到(0到n)= true
    3. 如果您尝试使用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;
                      });