我已经找到了这个问题的一些答案,但由于某种原因,它对我没用。
我有一大堆对象需要按布尔属性排序(所有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
答案 0 :(得分:2)
您可以采用布尔值b
和值a
的增量,因为true
变为值1
和false
0
使用减号运算符隐式转换为数字。
var array = [false, true, false, false, true, true, false, true];
array.sort((a, b) => b - a);
console.log(array);
&#13;