我希望能够通过嵌套对象来排序数组。
我有这个数组包含有关时间轴上的对象的信息,我可以通过嵌套数组中定义的start
位置对此进行排序。我可以使用lines[0].events[0].start
这是数组:
timelines = [
{
name: 'obj1',
data: { id : 'obj1-guid' },
lines: [{
events: [{
name: 'animation1',
data : { id : 'animation1-guid' },
start : 100,
duration : 200
}]
}],
video_url: 'url',
},
{
name: 'obj2',
data: { id : 'obj2-guid' },
lines: [{
events: [{
name: 'animation1',
data : { id : 'animation1-guid' },
start : 4,
duration : 200
}]
}],
video_url: 'url',
},
{
name: 'obj3',
data: { id : 'obj3-guid' },
lines: [{
events: [{
name: 'animation1',
data : { id : 'animation1-guid' },
start : 56,
duration : 200
}]
}],
video_url: 'url',
},
];
我尝试过像这样的功能
function sorting(json_object, key_to_sort_by) {
function sortByKey(a, b) {
var x = a[key_to_sort_by];
var y = b[key_to_sort_by];
return ((x < y) ? -1 : ((x > y) ? 1 : 0));
}
json_object.sort(sortByKey);
}
timelines = sorting(timelines, 'lines[0].events[0].start');
但当然不能正常工作
答案 0 :(得分:1)
只是常规sort
:
timelines = [
{
name: 'obj1',
data: { id : 'obj1-guid' },
lines: [{
events: [{
name: 'animation1',
data : { id : 'animation1-guid' },
start : 100,
duration : 200
}]
}],
video_url: 'url',
},
{
name: 'obj2',
data: { id : 'obj2-guid' },
lines: [{
events: [{
name: 'animation1',
data : { id : 'animation1-guid' },
start : 4,
duration : 200
}]
}],
video_url: 'url',
},
{
name: 'obj3',
data: { id : 'obj3-guid' },
lines: [{
events: [{
name: 'animation1',
data : { id : 'animation1-guid' },
start : 56,
duration : 200
}]
}],
video_url: 'url',
},
];
const r = timelines.sort((a,b) => a.lines[0].events[0].start - b.lines[0].events[0].start);
console.log(r)
答案 1 :(得分:1)
您可以为[].sort
对于ASC排序,你可以做
timelines.sort( function(a, b){
return a.lines[0].events[0].start - b.lines[0].events[0].start
})
对于DESC
timelines.sort( function(a, b){
return b.lines[0].events[0].start - a.lines[0].events[0].start
})
您可以从MDN
了解有关如何评估比较功能的更多信息如果提供compareFunction,则根据compare函数的返回值对数组元素进行排序。如果a和b是要比较的两个元素,那么:
- 如果compareFunction(a,b)小于0,则将a排序为低于b的索引,即a先出现。
- 如果compareFunction(a,b)返回0,则保持a和b相对于彼此保持不变,但是对所有不同的元素进行排序。注意:ECMAscript标准不保证这种行为,因此并非所有浏览器(例如可追溯到至少2003年的Mozilla版本)都尊重这一点。
- 如果compareFunction(a,b)大于0,则将b排序为低于a的索引。
- compareFunction(a,b)在给定一对特定元素a和b作为其两个参数时必须始终返回相同的值。如果返回不一致的结果,则排序顺序未定义。