我有一个数组:
var q = [
{s: 'last', o: 1000},
{s: 's2'},
{s: 's8'},
{s: 's6'},
{s: 's1', o: 1},
{s: 's7'},
{s: 's9'},
{s: 's3', o: 3},
{s: 's5', o: 5},
{s: 's4', o: 4},
{s: 's10', o: 10}
]
我想按字段q.o对其进行排序,但此字段可能未定义。 我需要得到如下例子的结果:
var out = [
{s: 's1', o: 1},
{s: 's2'},
{s: 's3', o: 3},
{s: 's4', o: 4},
{s: 's5', o: 5},
{s: 's8'},
{s: 's6'},
{s: 's7'},
{s: 's9'},
{s: 's10', o: 10},
{s: 'last', o: 1000}
]
UPD:
s
是实际项目中的对象,它包含要启动的脚本。我需要按照他们的定义按顺序启动所有脚本,但在此之前我需要注入具有o
字段的脚本。
答案 0 :(得分:1)
这个怎么样?
var out = [];
var a1 = [],
a2 = [];
for (var i = 0; i < q.length; i++) {
if (q[i].o) {
a1.push(q[i]);
} else {
a2.push(q[i]);
}
}
a1.sort(function (a, b) {
return a.o - b.o;
});
var aux = a1[0].o;
while (a1.length || a2.length) {
if ((a1.length && a1[0].o == aux) || a2.length == 0) {
if(a1[1] && a1[1].o > a1[0].o) aux++;
out.push(a1.shift());
} else if(a2.length) {
out.push(a2.shift());
aux++;
}
}
答案 1 :(得分:0)
使用underscore.js并使用sortBy功能var out = sortBy(q,'s');
答案 2 :(得分:-1)
var out = q.sort(function (a,b){
if (a.o!=null && b.o!=null){
return a.o-b.o;
}
return a.s>b.s?1:-1;
});