因此,我试图弄清楚如果所有if / else语句都为false时如何执行函数。下面是我当前正在使用的代码片段,该代码片段使用for loop
迭代对象来检查对象中的值,然后检查key/pair
值technology
。
如果所有语句均为假,则应返回或执行功能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()
}
}
});
答案 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.some
(https://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