Mik*_* B. 4 javascript arrays sorting object
我不太擅长 JS,但到目前为止还幸存下来。我正在创建一个复杂的 JS 对象并想要对其进行排序。对象的结构如下所示:
cart.attributes = [
{
Attribute,
Value
}
...
];
Run Code Online (Sandbox Code Playgroud)
我正在创建一个独特的属性,它告诉我用冒号任意分隔的 3 个东西
:(产品 ID):(产品数量迭代器):(属性名称)
产品数量迭代器只是意味着,如果我有 3 个相同的产品,在我谈论的 3 种属性中。每个属性都有一个值。
问题 正如您从打印输出中看到的那样,没有组织。我想首先按(产品 ID)对这些结果进行排序,然后是(数量迭代器),然后按字母顺序(名称)。
下面是一个打印出来的对象,用下面的方法把它打印出来,然后是结果。
用于打印结果的代码
$.each(cart.attributes, function(attr, value) {
console.log("Attr: "+attr);
console.log("Value: "+value);
});
Run Code Online (Sandbox Code Playgroud)
结果
«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
Run Code Online (Sandbox Code Playgroud)
好的,从下面的评论中,我更清楚地了解了对象是什么。
假设对象如下所示:
cart.attributes = {
'46913872:2:Size' : 10,
'46913872:2:Hollow-to-Hem' : 57
// ...
}
Run Code Online (Sandbox Code Playgroud)
它不能排序,因为它不是数组。但是你可以整理出来打印。
在普通的旧 javascript 中,您可以执行以下操作:
// 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]]);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12063 次 |
最近记录: |