#arrays #angular #typescript #angular8
#массивы #angular #typescript #angular8
Вопрос:
Я получаю массив из 15 объектов с именами arrayReceived
. Я сортирую и сохраняю первые 6 объектов с наименьшим amount
значением внутри arraySorted
. Они сортируются по параметру с именем amount
. Может быть один или несколько объектов с одинаковым lowest amount value
. Я хочу удалить все объекты с наименьшим amount
значением и сохранить их в arrayLowest
. Это может быть один объект или несколько, если все они имеют одинаковое наименьшее количество. Остальное я хочу сохранить в arrayHigher
. Как я могу добиться этого в typescript.
this.arrayRevceived.sort(function (a,b)) {
return a.amount - b.amount;
}
this.arraySorted = arrayReceived.splice(0,6);
}
// it is working till here, the problem starts here
for(let i =0; i < this.arraySorted.length; i ) {
if (this.arraySorted[0].amount === this.arraySorted[i].amount){
this.arrayLowest.push(this.arraySorted[i]);
} else {
this.arrayHighest.push(this.arraySorted[i]);
}
}
Я даю цикл for для сопоставления с индексом [0], потому что, поскольку это отсортированный массив, он будет иметь наименьшее значение при индексе [0]. Если он совпадает со значениями следующего объекта, он поместит этот элемент в arrayLowest, а другой — в arrayHighest. Но это не работает. Спасибо за предложения.
Комментарии:
1. Просто к вашему сведению, if(this.arraySorted[0].amount = this.arraySorted[i].amount) здесь внутри оператора if вы сравниваете не его присвоение.
2. Спасибо. Это была опечатка. Я исправил это
3. @Bitly Итак, допустим, что в отсортированном массиве содержится около
10, 20, 10 ,40, 50, 60
в этом случае у arrayLowest будет два элемента10, 10
, а у arrayHighest должно быть остальное20, 40, 50, 60
правильно?4. это правильно @KamranKhatti кроме того, как только у меня будут arrayLowest и arrayHighest, я хочу отобразить данные в HTML с помощью привязки. На данный момент у меня есть логика только для одного массива. Но как бы я смог реализовать одну и ту же логику на 2 массивах?
5. @Bitly отправил исправление, можете ли вы это проверить, также для привязки в шаблоне, пожалуйста, обновите свой вопрос и добавьте представление шаблона так, как вы хотите показать.
Ответ №1:
Вот решение для фильтрации массива с наименьшим и наибольшим значением.
let arr = [
{ amount: 50, id: 5 },
{ amount: 30, id: 4 },
{ amount: 10, id: 2 },
{ amount: 70, id: 7 },
{ amount: 60, id: 6 },
{ amount: 10, id: 1 },
{ amount: 20, id: 3 },
]
arr.sort((a, b) => a.amount - b.amount);
arr = arr.splice(0, 6);
const lowestValues = [];
const heighestValues = [];
arr.map((val) => arr[0].amount === val.amount ? lowestValues.push(val) : heighestValues.push(val));
console.log(lowestValues);
console.log(heighestValues);