Q209124
by jun68ykt
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>
<div id="test"></div>
JavaScript
var arr = [
["a","a","a",1,"2019/01/01"],
["a","b","a",1,"2019/01/01"],
["b","a","a",1,"2019/01/01"],
["a","a","c",1,"2019/01/01"],
["c","a","c",1,"2019/01/01"],
["b","b","b",1,"2019/01/01"],
["b","b","a",1,"2019/01/01"],
["c","a","c",1,"2019/07/01"],
["b","a","b",1,"2019/01/01"],
["a","a","a",1,"2019/02/02"]
];
// カテゴリ1,2,3をスラッシュを区切りとして連結した文字列をキーにグループ化したオブジェクトを得て、それのエントリ配列を取得
var groupedEntries = Object.entries(_.groupBy(arr, ary => ary.slice(0,3).join('/')));
// 各キーに対して、日付が最新の要素を値とするマップを作成
var keyToNewestDateMap = groupedEntries.reduce(
(map, [key, arrays]) => map.set(key, _.maxBy(arrays, ary => ary[4])), new Map());
// 上記で作成したマップのエントリから、キー(カテゴリを / で連結した文字列)でソートされた、値の配列を取得
var arr2 = [...keyToNewestDateMap]
.sort(([key1], [key2]) => key1.localeCompare(key2))
.map(([_, v]) => v);
for (var i = 0; i < arr2.length; i++) {
test.innerHTML += arr2[i] + "<br>";
}