Сортировать массив Angular 7 по числовому полю в порядке уменьшения или увеличения

#arrays #angular #sorting #rxjs #angular7

#массивы #angular #сортировка #rxjs #angular7

Вопрос:

мне нужна помощь, мне нужно отсортировать массив по полю PendingQuantity. У меня есть отрицательные и положительные числа. Итак, мой код:

 this.data.Products.sort(obj => obj.PendingQuantity);
  

Итак, мой массив

 "Products": [
            {
                "ProductCode": "MC30180",
                "Description": "Description_1",
                "NationalCode": "N.C. 0965",
                "PendingQuantity": 20,
                "toBeScanned": true
            },
            {
                "ProductCode": "Name_2",
                "Description": "Description_2",
                "NationalCode": "N.C. 0382",
                "PendingQuantity": -3,
                "toBeScanned": false
            },
            {
                "ProductCode": "Name_3",
                "Description": "Description_3",
                "NationalCode": "N.C. 8913",
                "PendingQuantity": 25,
                "toBeScanned": false
            }
        ]
  

порядок, который я хочу, это:

 "Products": [
                {
                    "ProductCode": "MC30180",
                    "Description": "Description_1",
                    "NationalCode": "N.C. 0965",
                    "PendingQuantity": -3,
                    "toBeScanned": true
                },
                {
                    "ProductCode": "Name_2",
                    "Description": "Description_2",
                    "NationalCode": "N.C. 0382",
                    "PendingQuantity": 25,
                    "toBeScanned": false
                },
                {
                    "ProductCode": "Name_3",
                    "Description": "Description_3",
                    "NationalCode": "N.C. 8913",
                    "PendingQuantity": 20,
                    "toBeScanned": false
                }
            ]
  

Ответ №1:

Вы можете использовать это для упорядочивания product = product.sort((a, b) => a.PendingQuantity - b.PendingQuantity);

Если вы хотите упорядочить по desc, используйте product = product.sort((a, b) => b.PendingQuantity - a.PendingQuantity);

Обновить:

Если вы показываете пользовательский порядок, подобный -3, 25, 20, вы можете обработать условие сортировки.

 product = product.sort((a, b) => { if (a.PendingQuantity < 0) {return -1; } if (b.PendingQuantity <0 ) {return 1;} return b.PendingQuantity - a.PendingQuantity });
  

 let product = [
            {
                "ProductCode": "MC30180",
                "Description": "Description_1",
                "NationalCode": "N.C. 0965",
                "PendingQuantity": 20,
                "toBeScanned": true
            },
            {
                "ProductCode": "Name_2",
                "Description": "Description_2",
                "NationalCode": "N.C. 0382",
                "PendingQuantity": -3,
                "toBeScanned": false
            },
            {
                "ProductCode": "Name_3",
                "Description": "Description_3",
                "NationalCode": "N.C. 8913",
                "PendingQuantity": 25,
                "toBeScanned": false
            }
        ];
        
        
product = product.sort((a, b) => a.PendingQuantity - b.PendingQuantity);
product = product.sort((a, b) => { if (a.PendingQuantity < 0) {return -1; } if (b.PendingQuantity <0 ) {return 1;} return b.PendingQuantity - a.PendingQuantity });

console.log(product);  

Комментарии:

1. Мне нужно упорядочить следующим образом: -3 первых, 25 вторых, 20 третьих элемента, отрицательный, который обрабатывается в вашем примере?

Ответ №2:

Вы можете использовать sort функцию Array

 products.sort((a,b)=> a['PendingQuantity'] - b['PendingQuantity']);
  

Комментарии:

1. Выше приведен порядок по возрастанию, если вы хотите порядок по убыванию, попробуйте : product.sort((a, b) => -(a.PendingQuantity - b.PendingQuantity));

2. Извините, но ваш скрипт работает, но в конце отображается отрицательное число, есть способ получить -3, 25, 20 в порядке убывания?