0

所以我试图弄清楚如果所有 if/else 语句都是错误的,如何执行一个函数。下面是我目前正在使用的一段代码,它使用 afor loop来检查对象中的值,然后迭代每个对象,然后检查key/pairtechnology

如果所有语句都是假的,它应该返回或执行函数noMatch当前代码片段noMatch为每个 else 语句执行函数。如果没有任何值匹配,有没有办法只执行一次?

$(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()
        }
    }    

});
4

5 回答 5

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();     
})();

于 2019-10-10T03:57:47.380 回答
3

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

const technology = "lte-technology";
const hasMatch = dataObj.some(obj => obj.technology === technology);
于 2019-10-10T02:08:38.313 回答
2

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

let hasMatch = dataObject.some(x => x.technology === technology);
于 2019-10-10T02:07:43.933 回答
1

我无法找到一个副本,虽然我确定一个存在。

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

请注意,使用 javascript 的许多数组和对象方法中的 on 可能有一种更流畅的方式,但这是您修改后的代码以执行您想要的操作:

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');
}

请注意我关于使用===而不是的评论==- 有关更多信息,请参阅此问答

于 2019-10-10T02:03:05.300 回答
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();     

});

于 2019-10-10T02:02:31.243 回答