Javascript 如何对两个嵌套对象进行排序?

Javascript 如何对两个嵌套对象进行排序?,javascript,arrays,sorting,Javascript,Arrays,Sorting,我对这个嵌套对象排序有问题;我的目标是: Array of objects: [Object, Object] 此数组中有两个对象,这些对象中有一个对象:2016-5:object 2016-6:object 两个对象中的每个对象内部都是数组,其中只有一个数字: shift0:Array[1] shift1:Array[1] shift2:Array[1] shift3:Array[1] 数组中只有一个这样的数字(数组的索引为0): 我想能够排序的数字-26,42,53,31 看来 var

我对这个嵌套对象排序有问题;我的目标是:

Array of objects: [Object, Object]
此数组中有两个对象,这些对象中有一个对象:
2016-5:object 2016-6:object

两个对象中的每个对象内部都是数组,其中只有一个数字:

shift0:Array[1]
shift1:Array[1]
shift2:Array[1]
shift3:Array[1]
数组中只有一个这样的数字(数组的索引为0):

我想能够排序的数字-26,42,53,31

看来

var source = [{'2016-5': [{shift0: [26]}, 
                       {shift1: [42]}, 
                       {shift2: [53]}, 
                       {shift3: [31]}]},
           {'2016-6':  [{shift0: [33]}, 
                        {shift1: [15]}, 
                        {shift2: [13]}, 
                        {shift3: [66]}]}
 ];
我想要的结果应该是:

var source = [{'2016-5': [{shift0: [26]}, 
                           {shift3: [31]}, 
                           {shift1: [42]}, 
                           {shift2: [53]}]},
               {'2016-6':  [{shift2: [13]}, 
                            {shift1: [15]}, 
                            {shift0: [33]}, 
                            {shift3: [66]}]}
     ];

您提供的JSON无效,假设您的JSON如下:

var source = [{'2016-5': [{shift0: [26]}, 
                           {shift0: [42]}, 
                           {shift0: [53]}, 
                           {shift0: [31]}]},
               {'2016-6':  [{shift0: [33]}, 
                            {shift0: [15]}, 
                            {shift0: [13]}, 
                            {shift0: [66]}]}
 ];
然后你可以试试:

var result =
         source.map(function(item){
                    Object.keys(item)
                          .map(function(key){
                                 item[key] = 
                                      item[key].sort(function(p, c){
                                             return p.shift0[0]-c.shift0[0];
                                      });
                           });
                     return item;
         });
试试这个

var source=[{'2016-5':[{shift0:[26]},
{shift1:[42]},
{shift2:[53]},
{shift3:[31]}]},
{'2016-6':[{shift0:[33]},
{shift1:[15]},
{shift2:[13]},
{shift3:[66]}]}
];
source.forEach(函数(obj){
Object.keys(obj).forEach(函数(key){
console.log(obj[key]);
obj[key]。排序(函数(a,b){
返回a[Object.keys(a)[0]]-b[Object.keys(b)[0]];
})
});
});

document.body.innerHTML+=JSON.stringify(源代码,0,4)
您给出的示例不是有效的JSON:
{2016-5:{shift0:[26]},{shift0:[42]}
。此外,你能在这个例子中添加预期的结果吗?当我编辑我的问题时,你能编辑你的答案吗?我真的弄错了我的json和json在shift0,shift1,shift2的不同值中。。。到一定数量(我不知道会有多少班次)。谢谢谢谢你的回答,我得到的是
TypeError:obj[key]。排序不是一个函数
,但我会调试代码,我想问题就在我这边。:)我的var与我写的有点不同,这段代码不起作用,我很不擅长整理:
[{“2016-5”:{“shift0”:[26],“shift1”:[42],“shift2”:[53],“shift3”:[31]},{“2016-6”:‌​{“shift0:[47],“shift1:[26],“shift2:[58],“shift3:[52],“shift4:[22]}]
,这是完全不同的。在您的问题
2016-5
中有数组值,但在您的注释中有对象。是的,我知道,很抱歉,这是我的错误,但如果您能帮助我按照评论中的内容进行排序,我将不胜感激-/@实际上,您不能对JSON对象进行排序,因为键不像数组项那样遵循任何顺序。看一看
var result =
         source.map(function(item){
                    Object.keys(item)
                          .map(function(key){
                                 item[key] = 
                                      item[key].sort(function(p, c){
                                             return p.shift0[0]-c.shift0[0];
                                      });
                           });
                     return item;
         });