首页 > 解决方案 > 数组中的对象排序不正确

问题描述

如何按 newUan 价格和价格对这个数组进行排序?如果有更多代码,那么函数将被错误地排序我写了代码,但它工作不正确

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

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 + защитное стекло + чехол!',
}];

标签: javascriptarraysstringsortingobject

解决方案


因为价格并不总是有newUan属性。您可以在sort回调中执行类似的操作,parseInt(b.price.newUan || b.price). 这表示如果newUan存在将其解析为整数,但如果不存在则解析price为整数。

我也从价格中删除了空格,以便可以正确地将其转换为整数。

请参阅下面的片段:

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


推荐阅读