Индивидуальная сортировка в Typescript - PullRequest
0 голосов
/ 25 октября 2018

Скажем, у меня есть массив

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 }

Любое предложение?

1 Ответ

0 голосов
/ 25 октября 2018

Обновлен ответ, чтобы учесть повторяющиеся значения в списке продуктов.

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: Выборочная сортировка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...