下划线,需要为数组创建多个顺序

Underscore and needs to create multiple order for an array

本文关键字:创建 顺序 数组 下划线      更新时间:2023-09-26

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
}

提前致谢

不能对对象属性进行排序。您将需要使用替代数据结构,例如对象数组。

例如,您可以使用以下代码构建这样的结构:

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');

上。如果你真的想创建一个对象,那么这就是你可以做到的:

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}

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

dfsk帮我找到了逻辑,我只是修复了他的函数:

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