Werk met vlae in JavaScript
Nou sal ons leer hoe om met vlae te werk.
'n Vlag is 'n spesiale veranderlike wat
slegs twee waardes kan aanneem: true
en false. Met behulp van vlae kan jy
probleme oplos wat die afwesigheid van iets
nagaan: byvoorbeeld, jy kan nagaan of 'n array
geen element met 'n sekere waarde het nie. Kom
ons begin.
Kom ons los die volgende probleem op: gegee 'n array
met getalle, ons moet nagaan of dit 'n
element met die waarde 3 bevat of nie. Indien
wel, druk ons '+++' uit, indien nie,
druk ons '---' uit.
Laat ons eers probeer om '+++' uit te druk.
Om dit te doen, gaan ons deur al die elemente van ons array
en met 'n if-stelling sal ons vra: is die huidige
element gelyk aan die waarde 3? As dit gelyk is, druk
ons '+++' uit:
let arr = [1, 2, 3, 4, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++');
}
}
Maar ons oplossing is nie baie goed nie: want as
daar in die array nie een waarde 3 is nie,
maar verskeie, dan sal '+++' verskeie kere
uitgedruk word. Kom ons wysig ons array (maak
twee elemente met waarde 3) en oortuig onsself hiervan:
let arr = [1, 2, 3, 4, 3, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++'); // sal verskeie kere uitdruk
}
}
Kom ons los die probleem op: beëindig die lus met
break as die element reeds gevind is:
let arr = [1, 2, 3, 4, 3, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++');
break; // beëindig die lus
}
}
Laat ons nou probeer om dit so te maak dat,
as daar glad geen elemente met die waarde
3 in die array is nie, '---' uitgedruk word.
'n Algemene misverstand sou wees om else by
ons if-stelling te voeg - in hierdie geval sal '---'
uitgedruk word vir alle elemente wat nie
3 is nie:
let arr = [1, 2, 3, 4, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++'); // sal by element 3 uitdruk
} else {
console.log('---'); // sal by elemente 1, 2, 4, 5 uitdruk
}
}
So, die idee om else by te voeg - is 'n slegte
idee, dit werk nie. Om probleme van hierdie tipe op te los
(sulke probleme kom redelik gereed voor) gebruik mens sogenaamde vlae.
Soos reeds hierbo genoem, is 'n vlag 'n soort
veranderlike wat twee waardes kan aanneem:
true of false.
So, kom ons maak 'n veranderlike flag
met so 'n betekenis: as dit gelyk is aan true,
dan bevat die array die element 3, en as
dit false is, dan is daar geen so 'n element nie.
Aanvanklik stel ons die veranderlike flag
op die waarde false - dit wil sê ons sal aanneem
dat daar geen element 3 in die array is nie:
let arr = [1, 2, 3, 4, 5];
let flag = false; // ons aanneem element 3 is nie in die array nie
Daarna sal ons 'n lus begin met 'n if-stelling soos ons dit
vroeër gedoen het. As die lus ontdek dat die array
die element 3 bevat - dan sal ons die veranderlike flag
op die waarde true stel en uit die lus breek
met behulp van break:
let arr = [1, 2, 3, 4, 5];
let flag = false; // ons aanneem element 3 is nie in die array nie
for (let elem of arr) {
if (elem == 3) {
flag = true; // element is daar - herdefinieer die veranderlike flag
break; // breek uit die lus
}
}
Die antwoord op die vraag, of daar 3 in die array is
of nie, kan ons slegs ná die lus gee.
En hierdie antwoord het ons reeds: ná die lus
kon die veranderlike flag steeds false gebly het
of kon sy waarde na true verander het,
as die lus 3 in die array ontdek het:
let arr = [1, 2, 3, 4, 5];
let flag = false;
for (let elem of arr) {
if (elem == 3) {
flag = true;
break;
}
}
// hier is die veranderlike flag gelyk aan óf true, óf false
Nou kan ons ná die lus 'n if-stelling maak wat
na die veranderlike flag sal kyk en
'+++' of '---' op die skerm sal druk:
let arr = [1, 2, 3, 4, 5];
let flag = false;
for (let elem of arr) {
if (elem == 3) {
flag = true;
break;
}
}
if (flag === true) {
console.log('+++');
} else {
console.log('---');
}
Gegee die volgende array:
let arr = ['a', 'b', 'c', 'd', 'e'];
Gaan na of hierdie array die element
'c' bevat.
Indien wel, druk '+++' uit,
en indien nie, druk '---' uit.
Skryf kode wat sal nagaan of 'n getal 'n priemgetal is of nie. 'n Priemgetal is slegs deelbaar deur een en deur homself, en is nie deelbaar deur ander getalle nie.