html - Hur kan jag filtrera rullgardinslistan för att visa vissa värden högst upp i listan?
Så jag har en rullgardinslista med en lista över nationaliteter och jag vill visa vissa nationaliteter högst upp i listan (eftersom de är de vanligaste i det landet). Hur kan jag göra det?
Här är min rullgardinslista:
<select [ngModel]="null" formControlName="nationality" required >
<option value="null" disabled selected>{{'SelectNationality' | translate}}</option>
<option *ngFor="let nationality of nationalities">{{nationality._nationalityKey}}</option>
</select>
Till exempel vill jag ha nationaliteterna japansk och kinesisk högst upp på listan istället för afghansk och amerikansk som normalt skulle vara högst upp.
Hur kan jag filtrera det så att t.ex. listan ser ut så här:
Chinese, Japanese, Afgan, American.
istället för detta:
Afgan, American, Chinese, Japanese
REDIGERA första försöket:
if (this.nationalities.indexOf('Japanese') > 0) {
this.nationalities.splice(this.nationalities.indexOf('Japanese'), 1);
this.nationalities.unshift('Japanese');
}
if (this.nationalities.indexOf('Chinese') > 0) {
this.nationalities.splice(this.nationalities.indexOf('Chinese'), 1);
this.nationalities.unshift('Chinese');
}
Tyvärr är detta redundant kod och det fungerar bara när jag initialt skapar en array. Om jag fyller en array med data från servern fungerar det inte längre. Varför och hur kan jag förbättra koden ovan?
Svar #1
Jag föreslår att dela och slå ihop din array:
const mostPopularNationalities = ['Japanese', 'Chinese'];
const otherNationalities = this.nationalities
.filter(nationality => !mostPopularNationalities.includes(nationality));
this.nationalities = {...mostPopularNationalities, ...otherNationalities};
Svar #2
I html:
<form action="exampleaction">
<input type="text" name="firstname" value="english">
<input type="text" name="lastname" value="african">
<input type="submit" value="chinesse">
</form>
I JavaScript:
var positions_one = [];
var positions_two = [];
var x = document.getElementsByTagName("input");
for (var i in x) {
if(x[i].value.includes("chinesse")) {
positions_one.push(x[i]);
}
if(x[i].value.includes("english")) {
positions_two.push(x[i]);
}
}
prova detta, detta är ett liknande exempel...
för ett null-värde använd detta filter...
if(x[i].value !== null || x[i].value !== undefined) { not do nothing};
