说我有数组
products= [{
"Name":'xyz',
'ID': 1
},
{
"Name":'abc',
'ID': 5
},
{
"Name":'def',
'ID': 3
}
]
sortOrder=[3,1,5]
如果我愿意,
sortOrder.forEach((item) => {
products.sort((productA) => {
if (productA.ID=== item) { return 1; } else { return -1; }
});
});
它不是按照sortOrder中指定的顺序排序。我想对sortOrder数组中提到的基于产品数组的sortOrder进行排序。因此,上述的输出应为{ "Name":'def', 'ID': 3 },{ "Name":'xyz', 'ID': 1 },{ "Name":'abc', 'ID': 5 }
有什么建议吗?
答案 0 :(得分:0)
更新答案以说明产品列表中的重复值。
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
name = 'Angular';
products= [{
"Name":'xyz',
'ID': 1
},
{
"Name":'abc',
'ID': 5
},
{
"Name":'def',
'ID': 3
},{
"Name":'xyz',
'ID': 1
},
{
"Name":'abc',
'ID': 5
},
{
"Name":'def',
'ID': 3
},
{
"Name":'def',
'ID': 3
},
{
"Name":'def',
'ID': 3
}
]
sortOrder=[3,1,5];
sortProducts(){
var tempSortedProducts :any[]=[];
for(let idx=0; idx<this.sortOrder.length; idx++){
this.products.forEach((product)=>{
if(product.ID===this.sortOrder[idx]){
tempSortedProducts.push(product)
}
})
}
this.products = tempSortedProducts;
}
}
Stackbliz链接:Custom Sort