【问题标题】:How to sort javascript object collection by boolean string field如何按布尔字符串字段对javascript对象集合进行排序
【发布时间】:2018-10-12 18:18:05
【问题描述】:

我想对集合进行如下排序:

1) 只有“shared==true”列的结果应该首先出现,所有其他的应该在单词之后。 尝试使用以下方法,但它不起作用并显示随机。

var cmp= function (a, b) {  
            
            if (a.shared == 'true' && b.shared != 'true') return -1;
            if (a.shared != 'true' && b.shared == 'true') return 0;
            return 1;
        }
        
var data= [{'id':1, 'name':'addd', 'shared':'true'},{'id':2, 'name':'addd1', 'shared':'false'},{'id':3, 'name':'addd2', 'shared':'true'}]
data.sort(cmp);
console.log(data);

【问题讨论】:

  • 这不是布尔值;那是一个字符串...
  • @HereticMonkey 冒名顶替者!
  • 编辑标题。它的字符串值,但真或假,需要排序。
  • data.sort((a,b) => (b.shared == 'true') - (a.shared == 'true'))

标签: javascript arrays json sorting


【解决方案1】:

差不多了。在你的第二个if,你想要返回 1。如果两者都为真,你想要返回 0。所以你最后的返回应该是 return 0

var cmp = function(a, b) {
  if (a.shared == 'true' && b.shared != 'true') return -1;
  if (a.shared != 'true' && b.shared == 'true') return 1;
  return 0;
}

var data = [{
  'id': 1,
  'name': 'addd',
  'shared': 'true'
}, {
  'id': 2,
  'name': 'addd1',
  'shared': 'false'
}, {
  'id': 1,
  'name': 'addd2',
  'shared': 'true'
}]
data.sort(cmp);
console.log(data);

来自description

if (a is greater than b by the ordering criterion) {
    return 1;
}

【讨论】:

    【解决方案2】:

    带有过滤器和连接

    var data = [{
      'id': 1,
      'name': 'addd',
      'shared': 'true'
    }, {
      'id': 2,
      'name': 'addd1',
      'shared': 'false'
    }, {
      'id': 1,
      'name': 'addd2',
      'shared': 'true'
    }]
    
    
    const sorted = data.filter(x => x.shared === 'true').concat(data.filter(x => x.shared !== 'true'));
    console.log(sorted);

    【讨论】:

      猜你喜欢
      • 2013-11-16
      • 2014-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-02
      • 2022-01-12
      • 1970-01-01
      • 2016-04-01
      相关资源
      最近更新 更多