我有以下数组:
[
{
"BestCoupon": 1,
"Saving": "100",
"Successful": 1,
"couponCode": "CRIC100",
"description": "Get Rs. 100 Discount on purchase of Rs. 599 & above. Products include Eyeglasses & Sunglasses and more. Choose",
"domain": "www.lenskart.com",
"url": "http://www.lenskart.com/checkout/cart/"
},
{
"BestCoupon": 0,
"Saving": "NOT APPLICABLE :Coupon code \"CRIC200\" is not valid.",
"Successful": 0,
"couponCode": "CRIC200",
"description": "Get Rs. 200 Discount on purchase of Rs. 999 & above. Products include Eyeglasses & Sunglasses and more. Choose",
"domain": "www.lenskart.com",
"url": "http://www.lenskart.com/checkout/cart/"
},
{
"BestCoupon": 0,
"Saving": "NOT APPLICABLE : Coupon code \"CRIC300\" is not valid.",
"Successful": 0,
"couponCode": "CRIC300",
"description": "Get Rs. 300 Discount on purchase of Rs. 1199 & above. Products include Eyeglasses, Sunglasses & Contact Lenses",
"domain": "www.lenskart.com",
"url": "http://www.lenskart.com/checkout/cart/"
},
{
"BestCoupon": 0,
"Saving": "NOT APPLICABLE: Coupon code \"JJPREMIUM\" is not valid.",
"Successful": 0,
"couponCode": "JJPREMIUM",
"description": "Get Rs 600 Discount on John Jacobs Eyeglasses. Products include Eyeglasses. Choose from brand like John",
"domain": "www.lenskart.com",
"url": "http://www.lenskart.com/checkout/cart/"
},
{
"BestCoupon": 0,
"Saving": "NOT APPLICABLE: Coupon code \"LENS20130303\" is not valid.",
"Successful": 0,
"couponCode": "LENS20130303",
"description": "Get Rs. 500 Discount on purchase of Rs. 1000. Products include Eyeglasses, Sunglasses & Contact Lenses and",
"domain": "www.lenskart.com",
"url": "http://www.lenskart.com/checkout/cart/"
},
{
"BestCoupon": 0,
"Saving": "179.8",
"Successful": 1,
"couponCode": "LKEND20",
"description": "Get 20% Discount on Eyeglasses. Minimum Purchase Rs. 499. Products include Eyeglasses. Choose from brandslike",
"domain": "www.lenskart.com",
"url": "http://www.lenskart.com/checkout/cart/"
},
{
"BestCoupon": 0,
"Saving": "224.75",
"Successful": 1,
"couponCode": "LKEND25",
"description": "Flat 25% off on purchase of Rs 799 & above",
"domain": "www.lenskart.com",
"url": "http://www.lenskart.com/checkout/cart/"
},
{
"BestCoupon": 0,
"Saving": "NOT APPLICABLE : Coupon code \"LKEND30\" is not valid.",
"Successful": 0,
"couponCode": "LKEND30",
"description": "Get 30% Discount on purchase of Rs 1299 & above. Products include Eyeglasses, Sunglasses & Contact Lenses and",
"domain": "www.lenskart.com",
"url": "http://www.lenskart.com/checkout/cart/"
},
{
"BestCoupon": 0,
"Saving": "NOT APPLICABLE : Coupon code \"LKEND35\" is not valid.",
"Successful": 0,
"couponCode": "LKEND35",
"description": "Get 35% Discount on purchase of Rs 1499 & above. Products include Eyeglasses, Sunglasses & Contact Lenses and",
"domain": "www.lenskart.com",
"url": "http://www.lenskart.com/checkout/cart/"
},
{
"BestCoupon": 0,
"Saving": "100",
"Successful": 1,
"couponCode": "OMGABV600",
"description": "Get Rs. 100 Discounton order of Rs. 600 & Above. Products include Eyeglasses, Sunglasses & Contact Lenses and",
"domain": "www.lenskart.com",
"url": "http://www.lenskart.com/checkout/cart/"
},
{
"BestCoupon": 0,
"Saving": "NOT APPLICABLE : Coupon code \"POWERSUN20\" isnot valid.",
"Successful": 0,
"couponCode": "POWERSUN20",
"description": "Get 20% OFFon Power Sunglasses. Select from a vast collection.",
"domain": "www.lenskart.com",
"url": "http://www.lenskart.com/checkout/cart/"
},
{
"BestCoupon": 0,
"Saving": "179.8",
"Successful": 1,
"couponCode": "WEEKEND20",
"description": "Flat 20% OFF on purchase of Rs 499 & above - NA on Premium Brands & Contact Lenses",
"domain": "www.lenskart.com",
"url": "http://www.lenskart.com/checkout/cart/"
}
]
我想按“储蓄”的降序排序。我使用以下代码
couponObj.sort(function (a, b) {
if (a[0].Saving == b[0].Saving)
return 0;
if (a[0].Saving > b[0].Saving)
return -1;
if (a[0].Saving < b[0].Saving)
return 1;
});
它给我以下结果:
[
{
"BestCoupon": 0,
"Saving": "NOT APPLICABLE : Coupon code \"POWERSUN20\" is not valid.",
"Successful": 0,
"couponCode": "POWERSUN20",
"description": "Get 20% OFF on Power Sunglasses. Select from a vast collection.",
"domain": "www.lenskart.com",
"url": "http://www.lenskart.com/checkout/cart/"
},
{
"BestCoupon": 0,
"Saving": "NOT APPLICABLE : Coupon code \"LKEND35\" is not valid.",
"Successful": 0,
"couponCode": "LKEND35",
"description": "Get 35% Discount on purchase of Rs 1499 & above. Products include Eyeglasses, Sunglasses & Contact Lenses and",
"domain": "www.lenskart.com",
"url": "http://www.lenskart.com/checkout/cart/"
},
{
"BestCoupon": 0,
"Saving": "NOT APPLICABLE : Coupon code \"LKEND30\" is not valid.",
"Successful": 0,
"couponCode": "LKEND30",
"description": "Get 30% Discount on purchase of Rs 1299 & above. Products include Eyeglasses, Sunglasses & Contact Lenses and",
"domain": "www.lenskart.com",
"url": "http://www.lenskart.com/checkout/cart/"
},
{
"BestCoupon": 0,
"Saving": "NOT APPLICABLE : Coupon code \"LENS20130303\" is not valid.",
"Successful": 0,
"couponCode": "LENS20130303",
"description": "Get Rs. 500 Discount on purchase of Rs. 1000. Products include Eyeglasses, Sunglasses & Contact Lenses and",
"domain": "www.lenskart.com",
"url": "http://www.lenskart.com/checkout/cart/"
},
{
"BestCoupon": 0,
"Saving": "NOT APPLICABLE : Coupon code \"JJPREMIUM\" is not valid.",
"Successful": 0,
"couponCode": "JJPREMIUM",
"description": "Get Rs 600 Discount on John Jacobs Eyeglasses. Products include Eyeglasses. Choose from brand like John",
"domain": "www.lenskart.com",
"url": "http://www.lenskart.com/checkout/cart/"
},
{
"BestCoupon": 0,
"Saving": "NOT APPLICABLE : Coupon code \"CRIC300\" is not valid.",
"Successful": 0,
"couponCode": "CRIC300",
"description": "Get Rs. 300 Discount on purchase of Rs. 1199 & above. Products include Eyeglasses, Sunglasses & Contact Lenses",
"domain": "www.lenskart.com",
"url": "http://www.lenskart.com/checkout/cart/"
},
{
"BestCoupon": 0,
"Saving": "NOT APPLICABLE : Coupon code \"CRIC200\" is not valid.",
"Successful": 0,
"couponCode": "CRIC200",
"description": "Get Rs. 200 Discount on purchase of Rs. 999 &above. Products include Eyeglasses & Sunglasses and more. Choose",
"domain": "www.lenskart.com",
"url": "http://www.lenskart.com/checkout/cart/"
},
{
"BestCoupon": 0,
"Saving": "224.75",
"Successful": 1,
"couponCode": "LKEND25",
"description": "Flat 25% off on purchase of Rs 799 & above",
"domain": "www.lenskart.com",
"url": "http://www.lenskart.com/checkout/cart/"
},
{
"BestCoupon": 0,
"Saving": "179.8",
"Successful": 1,
"couponCode": "LKEND20",
"description": "Get 20% Discount on Eyeglasses. Minimum Purchase Rs. 499. Products include Eyeglasses. Choose from brands like",
"domain": "www.lenskart.com",
"url": "http://www.lenskart.com/checkout/cart/"
},
{
"BestCoupon": 0,
"Saving": "179.8",
"Successful": 1,
"couponCode": "WEEKEND20",
"description": "Flat 20%OFF on purchase of Rs 499 & above - NA on Premium Brands & Contact Lenses",
"domain": "www.lenskart.com",
"url": "http://www.lenskart.com/checkout/cart/"
},
{
"BestCoupon": 0,
"Saving": "100",
"Successful": 1,
"couponCode": "CRIC100",
"description": "Get Rs. 100 Discount on purchase of Rs. 599 & above. Products include Eyeglasses & Sunglasses and more. Choose",
"domain": "www.lenskart.com",
"url": "http://www.lenskart.com/checkout/cart/"
},
{
"BestCoupon": 0,
"Saving": "100",
"Successful": 1,
"couponCode": "OMGABV600",
"description": "Get Rs. 100 Discount on order of Rs. 600 & Above. Products include Eyeglasses, Sunglasses & Contact Lenses and",
"domain": "www.lenskart.com",
"url": "http://www.lenskart.com/checkout/cart/"
}
]
基本上它在数组项的顶部排序,其中保存是一个字符串。我想把它们放在最底层。
答案 0 :(得分:3)
您似乎正在尝试访问对象的属性0
,该属性似乎不存在;并在纠正错误的同时,更容易看到发生了什么。
couponObj.sort(function (a, b) {
a = +a.Saving, b = +b.Saving; // cast Number
// special cases
if (a !== a || b !== b) // If there is a NaN
return (a !== a) - (b !== b); // move it to the end
// classic descending sort
return b - a;
});
答案 1 :(得分:1)
正如其他人所建议的那样,但有一点需要注意:你有各种Saving
文本而不是描述......
couponObj.sort(function (a, b) {
a = parseFloat(a.Saving); // cast to number
b = parseFloat(b.Saving); // cast to number
if (isNaN(a)) return isNaN(b) ? 0 : 1;
if (isNaN(b)) return -1;
return b - a; // descending order
});
当您尝试将非数字转换为+
的数字时,返回的数字为NaN
(特殊值不能很好地排序)。出于这个原因,各种if (isNaN())
请注意,在初始版本中,我使用+a.Saving
将字符串转换为数字,但我已将其更改为parseFloat
。 null
:+null === 0
与parseFloat(null) === NaN
(我可以处理)之间存在细微差别。
答案 2 :(得分:0)
当比较器函数提供给Array.prototype.sort
时,会给出参数a
和b
,它们是原始数组的元素,而不是数组本身。
因此,在这种特殊情况下,您需要删除[0]
。例如,而不是:
if (a[0].Saving == b[0].Saving) { ...
尝试:
if (a.Saving === b.Saving) { ...
// ^-- also, it's best to use strict comparison
答案 3 :(得分:0)
使用parseFloat方法将字符串转换为浮点数:
couponObj.sort(function (a, b) {
if(a && b) {
var af = parseFloat(a.Saving);
var bf = parseFloat(b.Saving);
if(isNan(af)) return 1;
if(isNan(bf)) return -1;
return bf-af;
}
return 0; // ignore null entries
}