Удалять и сохранять элементы из отсортированного массива в другой массив объектов Angular 8

#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);
  

Демонстрация Stackblitz