2017-12-17 7 views
1

に基づいてオブジェクトの配列を並べ替えるには、各オブジェクトは、これらのプロパティがあります。順序または私​​はオブジェクトを含む配列を持っているキー値

{ country: 'United States' }, 
{ country: 'Netherlands' }, 
{ country: 'Spain' }, 
{ country: 'Spain' }, 

私は最初の値がものになるように配列をソートします「スペイン」と一緒に他のすべてを表示します。私はarray.sortを試しましたが、うまくいかないようです。私が間違っていることを確認していない。

は、これまでのところ、私はこの

arr.sort(function(a, b) {return a.country === 'Spain'}) 

arr.sort(function(a, b) {if (a.country === 'Spain') {return 1}}) 
+1

あなたがしようとしているものを追加してください。残りは出現の順にソートされるべきですか? –

+1

これまでに何を試しましたか? –

+0

arr.sort(function(a、b){return a.country === 'Spain'}) –

答えて

3

で試してみましたあなたは、文字列で、チェックを取ることができる、あなたはトップとの比較のデルタを取るためにソートしたいです。

他の国のソート順は安定していません。安定したソートのために

var array = [{ country: 'United States' }, { country: 'Netherlands' }, { country: 'Spain' }, { country: 'Spain' }]; 
 

 
array.sort(function (a, b) { 
 
    return (b.country === 'Spain') - (a.country === 'Spain'); 
 
}); 
 

 
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }

、それの元のインデックスでトップに'Spain'をソートし、残りの部分と、あなたはsorting with mapを使用することができます。

var array = [{ country: 'United States' }, { country: 'Netherlands' }, { country: 'Spain' }, { country: 'Spain' }], 
 
    sorted = array 
 
     .map(function (o, i) { 
 
      return { top: o.country === 'Spain', index: i }; 
 
     }) 
 
     .sort(function (a, b) { 
 
      return b.top - a.top || a.index - b.index; 
 
     }) 
 
     .map(function (o) { 
 
      return array[o.index]; 
 
     }); 
 

 
console.log(sorted);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

アルファベット順にするには 'b-a'でなければならないと思いますか? –

+0

@DerekBrownでは、非数値文字列を減算することはできません。 –

+0

数値以外の文字列を減算することを意味するわけではありません。 –

1

んが、実際のソートは必要ありません。 2つの異なる配列に分割し、それらを結合してください。

これにより、元のサブオーダーが維持されることも保証されます。

var data = [{"country":"United States"},{"country":"Netherlands"},{"country":"Spain"},{"country":"Spain"}]; 
 

 
var res = [].concat(...data.reduce((res, obj) => 
 
    (res[obj.country === "Spain" ? 0 : 1].push(obj), res) 
 
, [[],[]])); 
 

 
console.log(res);

そして、あなたは、元を変異させる必要がある場合は、次の操作を行います。

var data = [{"country":"United States"},{"country":"Netherlands"},{"country":"Spain"},{"country":"Spain"}]; 
 

 
var res = Object.assign(data, [].concat(...data.reduce((res, obj) => 
 
    (res[obj.country === "Spain" ? 0 : 1].push(obj), res) 
 
, [[],[]]))); 
 

 
console.log(data);

1

これは、JavaScriptのArray関数を使用して行うにはかなり簡単にする必要があります、特にsort(),filter()、およびreverse()

var json = [ 
 
    { 
 
    country: 'United States' 
 
    }, 
 
    { 
 
    country: 'Netherlands' 
 
    }, 
 
    { 
 
    country: 'Spain' 
 
    }, 
 
    { 
 
    country: 'Spain' 
 
    } 
 
]; 
 

 
var sorted = 
 
    // Spain Terms First 
 
    json.filter(j => j.country === 'Spain') 
 
    // Add Alphabetically-Sorted Other Terms 
 
    .concat(json.filter(j => j.country !== 'Spain').sort().reverse()); 
 
    
 
console.log(sorted);

関連する問題