¿Cómo puedo ordenar esta matriz por precio nuevo y precio? si hay más código, entonces la función se ordenará incorrectamente escribí código, pero funciona incorrectamente const sortedByPrice = () => {const ...

0
user402114 10 abr. 2021 a las 09:45

2 respuestas

La mejor respuesta

Porque el precio no siempre tiene la propiedad newUan. Puede hacer algo como esto dentro de la devolución de llamada sort, parseInt(b.price.newUan || b.price). Esto dice que si newUan existe, analícelo en un número entero, pero si no lo hace, entonces analice price en un número entero.

También eliminé los espacios en blanco de los precios, para que se pueda convertir a números enteros correctamente.

Vea el siguiente fragmento de código:

const products = [
  {
    ratingReviews: '264 отзыва',
    price: {
      oldUan: '4 333 грн',
      newUan: '3 799 грн',
    },
    name: 'Motorola MOTO G4 (XT1622) Black',
  },
  {
    ratingReviews: '1355 отзывов',
    price: '4 999 грн',
    name:
      'Samsung Galaxy J7 J700H/DS Black + карта памяти 16гб + чехол + защитное стекло!',
  },
  {
    ratingReviews: '426 отзывов',
    price: '5 199 грн',
    name: 'Samsung Galaxy J5 (2016) J510H/DS Black + защитное стекло + чехол!',
  },
];

const sortedByPrice = () => {
  const sortPrice = products.slice();
  sortPrice.sort(
    (a, b) =>
      parseInt((b.price.newUan || b.price).replace(" ", "")) -
      parseInt((a.price.newUan || a.price).replace(" ", ""))
  );
  return sortPrice;
};

console.log(sortedByPrice());
0
Som Shekhar Mukherjee 10 abr. 2021 a las 07:31

Puede verificar la existencia de newUan usando el operador || y luego tener un respaldo de price y proceder en consecuencia. Además, no debería haber espacio entre price como 4 333. Esto hará que parseInt devuelva 4.

const sortedByPrice = () => {
  const sortPrice = products.slice()
  sortPrice.sort((a, b) => {
    let first = a.price.newUan || a.price;
    let second = b.price.newUan || b.price;
    return parseInt(second) - parseInt(first);
  })
  return sortPrice;
};

const products = [{
    ratingReviews: '264 отзыва',
    price: {
      oldUan: '4333 грн',
      newUan: '3799 грн',
    },
    name: 'Motorola MOTO G4 (XT1622) Black',
  }, {
    ratingReviews: '1355 отзывов',
    price: '4999 грн',
    name: 'Samsung Galaxy J7 J700H/DS Black + карта памяти 16гб + чехол + защитное стекло!',
  }, {
    ratingReviews: '426 отзывов',
    price: '5199 грн',
    name: 'Samsung Galaxy J5 (2016) J510H/DS Black + защитное стекло + чехол!',
  },
  {
    ratingReviews: '426 отзывов',
    price: '2000 грн',
    name: 'Samsung Galaxy J5 (2016) J510H/DS Black + защитное стекло + чехол!',
  }
];


console.log(sortedByPrice())
0
Lakshya Thakur 10 abr. 2021 a las 07:01