Javascript,将对象与indexOf进行比较

Javascript, Comparing objects with indexOf

本文关键字:比较 indexOf 对象 Javascript      更新时间:2023-09-26

我正在尝试将当前对象与即将到来的id数组进行比较。基本思想是,如果该对象与接收的id数组中的任何对象都有相同的想法,那么我希望将selected的布尔值设置为true。我被指示使用一个for each,里面有一个indexOf来检查。这是我的尝试-

angular.forEach($scope.applicationsHere, function(index) {
                    if(data.applications.indexOf(index.id){
                        index.selected = true;
                    }
                });

因此,我想做的是将这里的应用程序与data.applications进行比较。如果applicationsHere有一个.id与data.aapplications中的一个数字匹配的对象(data.application只是一个id数组,如[1,2,3]),则将.selected设置为true。

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

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

这条线有以下实际行为(感谢@Pointy澄清所有选项)

  1. 未找到(-1)=true
  2. 第一个元素(0)=false
  3. 任何其他元素(1到n)=true

根据您的问题,您的预期输出是:

  1. 未找到(-1)=false
  2. 找到(0到n)=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;
                });