Angular: Как отсортировать список объектов по свойству? - PullRequest
0 голосов
/ 13 мая 2019

В Java мы можем использовать интерфейс Comparable для сортировки объектов по полям. Как и в следующем примере, мы сортируем фрукты по количеству

public class Fruit implements Comparable<Fruit>{

    private String fruitName;
    private String fruitDesc;
    private int quantity;

    public Fruit(String fruitName, String fruitDesc, int quantity) {
        this.fruitName = fruitName;
        this.fruitDesc = fruitDesc;
        this.quantity = quantity;
    }

    public String getFruitName() {
        return fruitName;
    }
    public void setFruitName(String fruitName) {
        this.fruitName = fruitName;
    }
    public String getFruitDesc() {
        return fruitDesc;
    }
    public void setFruitDesc(String fruitDesc) {
        this.fruitDesc = fruitDesc;
    }
    public int getQuantity() {
        return quantity;
    }
    public void setQuantity(int quantity) {
        this.quantity = quantity;
    }

    public int compareTo(Fruit compareFruit) {

        int compareQuantity = ((Fruit) compareFruit).getQuantity(); 
        return this.quantity - compareQuantity;

    }   
}

Я хочу знать, есть ли способ реализовать такую ​​реализацию в Angular (Typescript)?

export class Fruit {
    fruitName: string;
    fruitDesc: string;
    quantity: number;

    constructor() {}
}

1 Ответ

0 голосов
/ 13 мая 2019

Операция похожа на Java, но нет необходимости использовать интерфейс. Если вы хотите, чтобы фрукт был сопоставим, используйте метод. Конструктивно компилятор не будет выполнять проверки и во время выполнения будет работать:

compareTo(compareFruit: Fruit): int {
    return this.quantity - compareFruit.quantity;
}

Однако это происходит как в Java. Чтобы отсортировать массив в Java, вы используете метод сортировки коллекции и можете передать компаратор. Способ заказа элементов в машинописи идентичен. Вызывается метод сортировки коллекции, и в качестве параметра передается метод сравнения. Вот пример:

let fruits = [];
fruits.push(new Fruit(...));
fruits.push(new Fruit(...));
fruits.push(new Fruit(...));
fruits.push(new Fruit(...));

fruits.sort((fruitA, fruitB) => fruitB.quantity - fruitA.quantity);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...