循环内所有条件均为假时如何调用函数

时间:2019-10-10 01:49:26

标签: javascript json

因此,我试图弄清楚如果所有if / else语句都为false时如何执行函数。下面是我当前正在使用的代码片段,该代码片段使用for loop迭代对象来检查对象中的值,然后检查key/pairtechnology

如果所有语句均为假,则应返回或执行功能noMatch。当前代码段为其他所有语句执行功能noMatch。如果所有值都不匹配,是否有办法只执行一次?

$(document).ready(function() {
    let object = [
        {
            "planId": "1",
            "technology": "LTE@Home"
        },
        {
            "planId": "2",
            "technology": "LTE@Home"
        },
        {
            "planId": "54",
            "technology": "home-prepaid-wifi"
        },
        {
            "planId": "0",
            "technology": "XTreme Prepaid",
        }
    ];


    let technology = "lte-technology";
    let dataObject = object;

    function match() {
        console.log("match");
    }

    function noMatch() {
        console.log("no match");
    }

    for (let key in dataObject) {
        let obj = dataObject[key];


        if(technology == obj.technology) {
            return match()

        } else {
            return noMatch()
        }
    }    

});

5 个答案:

答案 0 :(得分:4)

嗨,您可以使用Array.some做这样的事情:

(() => {
    const items = [
        {
            "planId": "1",
            "technology": "LTE@Home"
        },
        {
            "planId": "2",
            "technology": "LTE@Home"
        },
        {
            "planId": "54",
            "technology": "home-prepaid-wifi"
        },
        {
            "planId": "0",
            "technology": "XTreme Prepaid",
        }
    ];
   
    const match = () => console.log("match");
    const noMatch = () => console.log("no match");
    const technology = "LTE@Home";    
    const hasMatch = items.some(x => x.technology === technology);
      
    return hasMatch ? match() : noMatch();     
})();

答案 1 :(得分:3)

我认为Array原型方法some在这种情况下效果很好:

const technology = "lte-technology";
const hasMatch = dataObj.some(obj => obj.technology === technology);

答案 2 :(得分:2)

最简洁的方法可能是Array.somehttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some

let hasMatch = dataObject.some(x => x.technology === technology);

答案 3 :(得分:1)

这应该有帮助。

    let object = [
        {
            "planId": "1",
            "technology": "LTE@Home"
        },
        {
            "planId": "2",
            "technology": "LTE@Home"
        },
        {
            "planId": "54",
            "technology": "home-prepaid-wifi"
        },
        {
            "planId": "0",
            "technology": "XTreme Prepaid",
        }
    ];


    let technology = "lte-technology";
    let dataObject = object;

    function match() {
        console.log("match");
    }

    function noMatch() {
        console.log("no match");
    }
    let ok = false; 
    for (let key in dataObject) {
        let obj = dataObject[key];


        if(technology == obj.technology) {
            ok= true; 
             break;
        } 

    }
             if(ok)
           return match();
         return noMatch();     

});

答案 4 :(得分:1)

我确定有一个副本,但我找不到它。

根据RobG的评论,您设置一个标志,并在循环结束后检查该标志。

请注意,使用javascript的许多数组和对象方法中的一种可能更平滑,但这是对您的代码进行修改以执行所需的操作:

let dataObject = [{
    "planId": "1",
    "technology": "LTE@Home"
  },
  {
    "planId": "2",
    "technology": "LTE@Home"
  },
  {
    "planId": "54",
    "technology": "home-prepaid-wifi"
  },
  {
    "planId": "0",
    "technology": "XTreme Prepaid",
  }
];

let technology = "lte-technology";

// set flag to false
let hasMatch = false;
for (let key in dataObject) {
  let obj = dataObject[key];

  // if the property matches, set flag to true
  // (never use ==  always use ===)
  if (technology === obj.technology) {
    hasMatch = true;
    // for performance, may as well stop the loop...
    break;
  }
}

if (hasMatch) {
  console.log('match');
} else {
  console.log('nomatch');
}

请注意我对使用===而不是==的评论-有关更多信息,see this Q&A