试图挑选一个自定义JavaScript对象 [英] Trying to sort a custom JavaScript object
问题描述
我不是在JS太好,但迄今还活了下来。我创建一个复杂的排序的JS对象,并希望排序。对象的结构是这样的:
cart.attributes = [
{
属性,
值
}
...
];
我创建一个独特的属性,它告诉我三样东西用冒号分隔随意:
(产品ID):(产品数量迭代器):(属性的名称)
产品数量迭代器只是意味着,如果我有相同的产品,其中3我在属性方面说起3。每个属性都有那么一个值。
问题正如你从打印出来看看,有没有组织。我想这些结果首先由(产品ID),那么(QTY迭代器)进行排序,然后按字母顺序(名称)。
下面是一个打印出来使用下面的方法的对象打印出来,然后将结果。
code用来打印结果
$。每个(cart.attributes,功能(ATTR,价值){
的console.log(的Attr:+ attr)使用;
的console.log(值:+值);
});
结果
«的Attr»46913872:2:大小
«价值»10
«的Attr»46913872:2:空心至下摆
«价值»57
«的Attr»46913872:1:臀围
«价值»34
«的Attr»46913872:2:胸围
«价值»34
«的Attr»46913872:2:连衣裙颜色(十六进制)
«价值»#FFFFFF
«的Attr»46913872:2:拉什剪切
«价值»速拉什剪切 - 6周
«的Attr»46913872:1:超长
«价值»5
«的Attr»46913872:2:臀围
«价值»34
«的Attr»46913872:1:腰围
«价值»29
«的Attr»46913872:2:腰围
«价值»23
«的Attr»46913872:2:连衣裙颜色(名称)
«价值»白色
«的Attr»46913872:1:拉什剪切
«价值»速拉什剪切 - 6周
«的Attr»46913872:1:腰带颜色(名称)
«价值»口红
«的Attr»46913872:2:腰带颜色(十六进制)
«价值»#000000
«的Attr»46913872:1:大小
«价值»14
«的Attr»46913872:1:空心至下摆
«价值»58
«的Attr»46913872:1:胸围
«价值»35
«的Attr»46913872:1:腰带颜色(十六进制)
«价值»#B6064C
«的Attr»46913872:1:连衣裙颜色(十六进制)
«价值»#F9C8D0
«的Attr»46913872:1:连衣裙颜色(名称)
«价值»茶玫瑰
«的Attr»46913872:2:超长
«价值»5
«的Attr»46913872:2:腰带颜色(名称)
«价值»黑色
从下面我的对象是什么更清晰的意见确定。
假设对象是这样的:
cart.attributes = {
'46913872:2:大小:10,
46913872:2:空心至哼哼:57
// ...
}
因为它不是一个数组它不能进行排序。但是,您可以在理清打印。
在普通的老JavaScript的你可以这样做:
//首先获得所有键:
变种键= [];
对(在cart.attributes变种N){
如果(cart.attributes.hasOwnProperty(正)){
keys.push(N);
}
}//现在键进行排序:
keys.sort(功能(A,B){
= attr_a的a.split(':');
attr_b = b.split(':'); //按产品ID:
如果(parseInt函数(attr_a的[0],10)所述; parseInt函数(attr_b [0],10))返回-1;
如果(parseInt函数(attr_a的[0],10)> parseInt函数(attr_b [0],10))返回1;
//排序数量:
如果(parseInt函数(attr_a的[1],10)所述; parseInt函数(attr_b [1],10))返回-1;
如果(parseInt函数(attr_a的[1],10)> parseInt函数(attr_b [1],10))返回1;
//最后按名称排序:
如果(attr_a的[2]所述; attr_b [2])返回-1;
如果(attr_a的[2]≥attr_b [2])返回1;
返回0;
})//现在打印出关键的排序顺序的对象:
对于(VAR I = 0; I< keys.length;我++){
的console.log(的Attr:+键[I]);
的console.log(值:+ cart.attributes [键[我]]);
}
I'm not too good at JS, but have survived thus far. I'm creating a sort-of complex JS object and wanting to sort it. The object's structure looks like this:
cart.attributes = [
{
Attribute,
Value
}
...
];
I'm creating a unique attribute that tells me 3 things separated arbitrarily by a colon:
(Product ID):(Product QTY Iterator):(Attribute's Name)
The product QTY iterator just means, if I have 3 of the same product, which of the 3 am I talking about in terms of the attribute. Each attribute has then a value.
THE PROBLEM As you'll see from the print-out, there's no organization. I'd like to sort these results first by the (Product ID), then the (QTY Iterator), then alphabetically by (Name).
Here's a print out of the object using the following method to print it out, and then the results.
CODE USING TO PRINT RESULTS
$.each(cart.attributes, function(attr, value) {
console.log("Attr: "+attr);
console.log("Value: "+value);
});
RESULTS
«Attr» 46913872:2:Size
«Value» 10
«Attr» 46913872:2:Hollow-to-Hem
«Value» 57"
«Attr» 46913872:1:Hips
«Value» 34"
«Attr» 46913872:2:Bust
«Value» 34"
«Attr» 46913872:2:Dress Color (hex)
«Value» #FFFFFF
«Attr» 46913872:2:Rush Cut
«Value» Super Rush Cut - 6 weeks
«Attr» 46913872:1:Extra Length
«Value» 5"
«Attr» 46913872:2:Hips
«Value» 34"
«Attr» 46913872:1:Waist
«Value» 29"
«Attr» 46913872:2:Waist
«Value» 23"
«Attr» 46913872:2:Dress Color (name)
«Value» White
«Attr» 46913872:1:Rush Cut
«Value» Super Rush Cut - 6 weeks
«Attr» 46913872:1:Sash Color (name)
«Value» Lipstick
«Attr» 46913872:2:Sash Color (hex)
«Value» #000000
«Attr» 46913872:1:Size
«Value» 14
«Attr» 46913872:1:Hollow-to-Hem
«Value» 58"
«Attr» 46913872:1:Bust
«Value» 35"
«Attr» 46913872:1:Sash Color (hex)
«Value» #B6064C
«Attr» 46913872:1:Dress Color (hex)
«Value» #F9C8D0
«Attr» 46913872:1:Dress Color (name)
«Value» Tea Rose
«Attr» 46913872:2:Extra Length
«Value» 5"
«Attr» 46913872:2:Sash Color (name)
«Value» Black
Ok from the comments below I got a clearer picture of what the object is.
Assuming the object looks like this:
cart.attributes = {
'46913872:2:Size' : 10,
'46913872:2:Hollow-to-Hem' : 57
// ...
}
It can't be sorted since it's not an Array. But you can sort it out for printing.
In plain old javascript you can do:
// First get all keys:
var keys = [];
for (var n in cart.attributes) {
if (cart.attributes.hasOwnProperty(n)) {
keys.push(n);
}
}
// now sort the keys:
keys.sort(function(a,b){
attr_a = a.split(':');
attr_b = b.split(':');
// sort by product ID:
if (parseInt(attr_a[0],10) < parseInt(attr_b[0],10)) return -1;
if (parseInt(attr_a[0],10) > parseInt(attr_b[0],10)) return 1;
// sort by quantity:
if (parseInt(attr_a[1],10) < parseInt(attr_b[1],10)) return -1;
if (parseInt(attr_a[1],10) > parseInt(attr_b[1],10)) return 1;
// finally sort by name:
if (attr_a[2] < attr_b[2]) return -1;
if (attr_a[2] > attr_b[2]) return 1;
return 0;
})
// now print out the object in key-sorted-order:
for (var i=0; i<keys.length; i++) {
console.log("Attr: "+keys[i]);
console.log("Value: "+cart.attributes[keys[i]]);
}
这篇关于试图挑选一个自定义JavaScript对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!