我有一组从数据库返回的行。它们以(media_id,order,front_image)
的形式返回。其中一个media
的{{1}}值为front_image
。然后我有一个像这样的排序函数:
TRUE
我想要实现的目标是保证如果.sort(function (m1, m2) {
if (m1.order < m2.order) {
val = -1;
} else if (m1.order > m2.order) {
val = 1;
}
return val;
})
的{{1}}值为media
,它将是数组中的第一个值。我尝试在sortFunction中将其添加为或语句,但这不会产生正确的结果。
答案 0 :(得分:1)
由于布尔值强制为数字值0(false
)和1(true
),因此您可以这样排序:
.sort(function (m1, m2) {
return (m2.front_image - m1.front_image) || (m1.order - m2.order);
})
但是如果赋予优先级的值是一个字符串"TRUE"
,那么你可以把它变成一个布尔表达式,如下所示:
.sort(function (m1, m2) {
return ((m2.front_image=="TRUE") - (m1.front_image=="TRUE")) || (m1.order - m2.order);
})
答案 1 :(得分:1)
一种可能的方法:
var input = [
{front_image: false, order: 4},
{front_image: false, order: 2},
{front_image: true, order: 3},
{front_image: false, order: 1},
{front_image: false, order: 0}
]
var output = input.sort(function (l, r) {
return (r.front_image - l.front_image)
|| (l.order - r.order)
})
console.log(output)
&#13;
答案 2 :(得分:1)
您可以检查front_image
是'TRUE'
并将项目移至顶部,然后按order
排序。
var data = [{ media_id: 1, order: 7, front_image: '' }, { media_id: 3, order: 6, front_image: '' }, { media_id: 6, order: 5, front_image: 'TRUE' }, { media_id: 4, order: 4, front_image: '' }, { media_id: 5, order: 3, front_image: 'TRUE' }, { media_id: 7, order: 2, front_image: '' }, { media_id: 8, order: 1, front_image: '' }];
data.sort(function (a, b) {
return (b.front_image === 'TRUE') - (a.front_image === 'TRUE') || a.order - b.order;
});
console.log(data);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;