所以我有一个包含国籍列表的下拉列表,我想在列表顶部显示某些国籍(因为它们是该国家/地区最常见的国籍(。我该怎么做?
这是我的下拉列表:
<select [ngModel]="null" formControlName="nationality" required >
<option value="null" disabled selected>{{'SelectNationality' | translate}}</option>
<option *ngFor="let nationality of nationalities">{{nationality._nationalityKey}}</option>
</select>
例如,我希望国籍日本人和中国人排在列表的顶部,而不是阿富汗人和美国人,这通常是顶部。
如何过滤它,以便例如列表如下所示:
Chinese, Japanese, Afgan, American.
取而代之的是:
Afgan, American, Chinese, Japanese
编辑第一次尝试:
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');
}
不幸的是,这是冗余代码,它仅适用于我最初初始化数组时。如果我用来自服务器的数据填充数组,它就不再有效。为什么以及如何使上面的代码更好?
我建议拆分合并您的数组:
const mostPopularNationalities = ['Japanese', 'Chinese'];
const otherNationalities = this.nationalities
.filter(nationality => !mostPopularNationalities.includes(nationality));
this.nationalities = {...mostPopularNationalities, ...otherNationalities};
在 html 中:
<form action="exampleaction">
<input type="text" name="firstname" value="english">
<input type="text" name="lastname" value="african">
<input type="submit" value="chinesse">
</form>
在 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]);
}
}
试试这个,这是一个类似的例子...
对于空值,请使用此过滤器...
if(x[i].value !== null || x[i].value !== undefined) { not do nothing};