使用JavaScript

时间:2017-10-20 20:23:31

标签: javascript arrays sorting

我已经找到了这个问题的一些答案,但由于某种原因,它对我没用。

我有一大堆对象需要按布尔属性排序(所有true需要首先出现)。我找到的最受欢迎的答案是:

let myList = [
  {
    thing: <div>Something</div>,
    sortingAttribute: false
  },
  {
    thing: <div>Something else</div>,
    sortingAttribute: true
  },
  {
    thing: <div>Whatever</div>,
    sortingAttribute: true
  }
  .
  .
  .
]

myList.sort((x, y) => {
  return (x.sortingAttribute === y.sortingAttribute) ? 0 : x ? -1 : 1
})

不幸的是,这不起作用,我试图对其进行一些修改,但无济于事。

另一种选择就是:

myList.sort((x, y) => {return x.sortingAttribute - y.sortingAttribute})

然而它也没有奏效。我也尝试使用下划线的sortBy函数,但没有。

我不认为这与它有任何关系,但在尝试排序之前,我在另一个列表上执行.map()以获得myList,就像现在一样。这会不会成为问题的原因?除此之外,它非常直接。

这是完整的功能:

getMyList (basicArray) {
    let myList = basicArray.map((arr, key) => {
      const sortingAttribute = key > 2 // just used for the example
      // the real code would obviously generate a more random order of trues and falses

      // do other stuff
      return {
        thing: (<div key={key}>{stuff}</div>),
        sortingAttribute: sortingAttribute
      }
    })

    myList.sort((x, y) => {
      return (x.isQualified === y.isQualified) ? 0 : x ? -1 : 1
    })
    console.log('myList SORTED', myList)
  }

目前,它正好显示了从.map()吐出的顺序 因此,对于大小为5的数组,我们将:

  

false,false,false,true,true

1 个答案:

答案 0 :(得分:2)

您可以采用布尔值b和值a的增量,因为true变为值1false 0使用减号运算符隐式转换为数字。

&#13;
&#13;
var array = [false, true, false, false, true, true, false, true];

array.sort((a, b) => b - a);

console.log(array);
&#13;
&#13;
&#13;