#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 в порядке убывания?