具有覆盖值的Javascript订单功能

时间:2017-03-27 21:03:35

标签: javascript sorting

我有一组从数据库返回的行。它们以(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中将其添加为或语句,但这不会产生正确的结果。

3 个答案:

答案 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)

一种可能的方法:

&#13;
&#13;
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;
&#13;
&#13;

答案 2 :(得分:1)

您可以检查front_image'TRUE'并将项目移至顶部,然后按order排序。

&#13;
&#13;
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;
&#13;
&#13;