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