2017-10-20 9 views
1

私はこの質問に対していくつかの答えを見つけましたが、何らかの理由でそれは私のために働いていません。JavaScriptのブール値属性を使用してオブジェクトの複雑な配列を並べ替える

私はブール値のプロパティ(すべて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となっています。これはどういうわけか問題の原因になりますか?それ以外はかなりストレートです。ここで

は、フル機能である:サイズ5の配列のために、私たちは持っているだろうので.map() から吐き出された正確順序を表示

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) 
    } 

現在:

偽、false、false、true、true

+1

あなたは 'ます。myList = myList.sort((x、y)は=> {戻りx.sortingAttribute - y.sortingAttributeを})やっていますか'? –

+0

@Keith that worked!ありがとう!あなたが望むなら、答えとしてそれをマークすることができます。 – theJuls

+0

あなたの結果に基づいてarray.reverse()を呼び出すと、出力はtrue、false、false、falseとなります。 –

答えて

2

ブール値のデルタを取ることができますbtrueは、マイナス演算子で暗黙的にキャストした値1false0になるため、値はaです。

var array = [false, true, false, false, true, true, false, true]; 
 

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

 
console.log(array);

+0

うん、私はおそらくそれらを逆転させました。出来た!ありがとう! – theJuls

関連する問題