下划线并需要为数组创建多个订单

时间:2015-03-08 08:27:46

标签: javascript underscore.js

2个问题:

我有一个包含2个数组的对象:

{"iOS":["iPad","iPhone","iPhone6","iPad Mini"],"Android":["Galaxy S6","Galaxy S4"],"BlackBerry":["BlackBerry3"]}

如何使用下划线构建这样的单个对象:

myobject = {"iPad" : 0,"iPhone3": 0,"iPhone6" :0 ,"iPad Mini" :0, "Galaxy S6": 0,"Galaxy S4" :0, "BlackBerry3" : 0}

第二个问题,一旦我有这样的对象:

myobject = {
"iPad" : 12,
"iPhone3": 0,
"iPhone6" :4 ,
"iPad Mini" :3, 
"Galaxy S6": 1,
"Galaxy S4": 14,
"BlackBerry3" : 1
}

如何通过降序值来获取

myobject = {
"Galaxy S4" :14,
"iPad" : 12,
"iPhone6" :4 ,
"iPad Mini" :3, 
"Galaxy S6" :1, 
"iPhone3": 0, 
"BlackBerry3" : 0
}

感谢提前

2 个答案:

答案 0 :(得分:0)

您无法订购对象属性。您将需要使用替代数据结构,例如对象数组。

例如,您可以使用以下代码构建此类结构:

var myObject = _.chain(data).values().flatten().map(function(el) {
    return {
        type: el,
        count: 0
    };
}).value();

看起来像这样:

[{"type":"iPad","count":0},{"type":"iPhone","count":0}, ... ];

然后使用_.sortBy函数对其进行排序很容易:

_.sortBy(myObject, 'count');

UPD。如果你真的想创建一个对象,那么你可以这样做:

var myObject = _.chain(data).values().flatten().reduce(function(prev, curr) { 
    prev[curr] = 0; 
    return prev; 
}, {}).value();

这将给出

{"iPad":0,"iPhone":0,"iPhone6":0,"iPad Mini":0,"Galaxy S6":0,"Galaxy S4":0,"BlackBerry3":0}

答案 1 :(得分:0)

我终于找到了解决问题的方法。

dfsk帮我找到了逻辑,我刚修正了他的功能:

var new_myobject = _.chain(myobject).map(function(num, key) {
     return {
          type: key,
          count: num
     };
}).sortBy('count').reverse().value();