简体   繁体   English

如果键在 JavaScript 中具有值和对象,如何按值对对象进行排序

[英]How to sort object by value if key has value and object in JavaScript

I have an array of JavaScript objects that contain an object which includes a price attribute.我有一个 JavaScript 对象数组,其中包含一个包含价格属性的对象。 How to sort it by price?如何按价格排序?

Following is my input array.以下是我的输入数组。

const products = [
{
    ratingReviews: '264 отзыва',
    price: {
        oldUan: '4 333 грн',
        newUan: '3 799 грн',
    },
    name: 'Motorola MOTO G4 (XT1622) Black',
}, {
    ratingReviews: '488 отзывов',
    price: '6 199 грн',
    name: 'Samsung Galaxy J7 (2016) J710F/DS Gold + защитное стекло + чехол!',
}, {
    ratingReviews: '198 отзывов',
    price: {
        oldUan: '3 495 грн',
        newUan: '2 995 грн',
    },
    name: 'Lenovo K5 (A6020a40) Silver',
}]

Below is my code and it is not working correctly.下面是我的代码,它无法正常工作。

function makeNumber(string) {
    const reg = /\d+/g
    if(reg.test(string)){
      let numberStr = string.match(reg)
      const number = [...numberStr]
      return +number.join('')
    }
    return ''
}

function compare(a, b) {
    if (b.price.hasOwnProperty('newUan')) {
      b = makeNumber(b.price.newUan)
      a = makeNumber(a.price.newUan)
    } else {
        b = makeNumber(b.price)
        a = makeNumber(a.price)
}
    return b - a
}

const sortedByPrice = () => {
    return products.sort(compare)
}

Your compare method should need some modifications.您的比较方法应该需要一些修改。

function compare(a, b) {
    if (a.price.hasOwnProperty('newUan')) {
        a = makeNumber(a.price.newUan)
    }
    if (b.price.hasOwnProperty('newUan')) {
        b = makeNumber(b.price.newUan)
    }
    b = makeNumber(b.price)
    a = makeNumber(a.price)
    return b - a 
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM