试图挑选一个自定义JavaScript对象 [英] Trying to sort a custom JavaScript object

查看:106
本文介绍了试图挑选一个自定义JavaScript对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不是在JS太好,但迄今还活了下来。我创建一个复杂的排序的JS对象,并希望排序。对象的结构是这样的:

  cart.attributes = [
  {
    属性,
    值
  }
  ...
];

我创建一个独特的属性,它告诉我三样东西用冒号分隔随意:
(产品ID):(产品数量迭代器):(属性的名称)

产品数量迭代器只是意味着,如果我有相同的产品,其中3我在属性方面说起3。每个属性都有那么一个值。

问题正如你从打印出来看看,有没有组织。我想这些结果首先由(产品ID),那么(QTY迭代器)进行排序,然后按字母顺序(名称)。

下面是一个打印出来使用下面的方法的对象打印出来,然后将结果。

code用来打印结果

  $。每个(cart.attributes,功能(ATTR,价值){
  的console.log(的Attr:+ attr)使用;
  的console.log(值:+值);
});

结果

 «的Attr»4691​​3872:2:大小
«价值»10
«的Attr»4691​​3872:2:空心至下摆
«价值»57
«的Attr»4691​​3872:1:臀围
«价值»34
«的Attr»4691​​3872:2:胸围
«价值»34
«的Attr»4691​​3872:2:连衣裙颜色(十六进制)
«价值»#FFFFFF
«的Attr»4691​​3872:2:拉什剪切
«价值»速拉什剪切 - 6周
«的Attr»4691​​3872:1:超长
«价值»5
«的Attr»4691​​3872:2:臀围
«价值»34
«的Attr»4691​​3872:1:腰围
«价值»29
«的Attr»4691​​3872:2:腰围
«价值»23
«的Attr»4691​​3872:2:连衣裙颜色(名称)
«价值»白色
«的Attr»4691​​3872:1:拉什剪切
«价值»速拉什剪切 - 6周
«的Attr»4691​​3872:1:腰带颜色(名称)
«价值»口红
«的Attr»4691​​3872:2:腰带颜色(十六进制)
«价值»#000000
«的Attr»4691​​3872:1:大小
«价值»14
«的Attr»4691​​3872:1:空心至下摆
«价值»58
«的Attr»4691​​3872:1:胸围
«价值»35
«的Attr»4691​​3872:1:腰带颜色(十六进制)
«价值»#B6064C
«的Attr»4691​​3872:1:连衣裙颜色(十六进制)
«价值»#F9C8D0
«的Attr»4691​​3872:1:连衣裙颜色(名称)
«价值»茶玫瑰
«的Attr»4691​​3872:2:超长
«价值»5
«的Attr»4691​​3872: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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆