私はこのような配列を受け取り:JavaScript - 数字の文字列で配列の配列をソートするには?
[
[{"name":"one","team":"------","checked":false,"position":"-"},
{"name":"two","team":"------","checked":false,"position":"1"}],
[{"name":"three","team":"------","checked":false,"position":"3"},
{"name":"four","team":"------","checked":false,"position":"7"}]
]
Iが最終的な出力は次のようになりたい:
[
[{"name":"two","team":"------","checked":false,"position":"1"},
{"name":"four","team":"------","checked":false,"position":"7"}],
[{"name":"three","team":"------","checked":false,"position":"3"},
{"name":"one","team":"------","checked":false,"position":"-"}]
]
アレイが最大位置値と最小位置の値によってソートされていることを意味します前記第2のサブアレイ内の前記第2の最大位置値と前記第2の最小位置値とに基づいて、位置に " - "がある場合、文字列番号の後ろに残ります。
は、これまでのところ私はlodashでこれを試してみました:
var mergedArray = vm.roundOf4[0].concat(vm.roundOf4[1]);
var count = _.countBy(mergedArray, {position: '-'});
var ascArray = _.cloneDeep(mergedArray);
var descArray = _.cloneDeep(mergedArray);
_.sortByOrder(ascArray, 'position', 'asc');
_.sortByOrder(descArray, 'position', 'desc');
_.times(count.true, ascArray.push(ascArray.shift()));
vm.roundOf4.some(function (array, i) {
array.some(function (object, j) {
if (j === 0) {
vm.roundOf4[i][j] = ascArray[i];
} else if (j === 1) {
vm.roundOf4[i][j] = descArray[i];
}
});
});
しかし機能による昇順ソートが正しくソートされていない位置の値を、それがランダムソートを与えているよう。位置が文字列の値なので、私はそれがわからない。
代わりに数字を使用する必要がありますか?
'1'と '-'は同じサブ配列ではなく、それらが分離しているご希望の出力にありました。その背後にある論理は何ですか? –
論理はありません。 " - "はまだ設定されていません。それは別の番号でも構いませんが、まだ設定されていないので、最後に残っていますので、どのオブジェクトにも同じことが適用されます。 – forkfork
'-'については言及していませんが、私は、' 1'と '-'がソートの後にどのように離れているのか話しています! (**前:**同じサブアレイにあった**後:**それぞれ異なるサブアレイに行きました)! '7'と' 3'と同じです! –