以下のものがあると仮定します:
var array =
[
{"name":"Joe", "age":17},
{"name":"Bob", "age":17},
{"name":"Carl", "age": 35}
]
次のような結果配列が得られるように、すべての異なる年齢の配列を取得できる最良の方法は何ですか。
[17, 35]
各配列を反復処理して「age」の値をチェックし、別の配列の存在をチェックし、存在しない場合は追加する必要がないように、データを構造化する別の方法や、より良い方法はありますか?
繰り返し処理せずに個別の年齢だけを取り出す方法があれば...
現在の非効率的な方法を改善したいのですが...「配列」がオブジェクトの配列ではなく、一意のキー (つまり「1,2,3」) を持つオブジェクトの「マップ」であることを意味するのであれば、それも問題ありません。最もパフォーマンス効率の良い方法を探しているだけです。
以下は私が現在行っている方法ですが、私にとっては、反復は機能するにもかかわらず、効率が悪いように思えます...
var distinct = []
for (var i = 0; i < array.length; i++)
if (array[i].age not in distinct)
distinct.push(array[i].age)
ベストアンサー1
ES6/ES2015 以降を使用している場合は、次のように実行できます。
const data = [
{ group: 'A', name: 'SD' },
{ group: 'B', name: 'FI' },
{ group: 'A', name: 'MM' },
{ group: 'B', name: 'CO'}
];
const unique = [...new Set(data.map(item => item.group))]; // [ 'A', 'B']
ここ実行方法の例です。