重複した値を持つ配列をJavascriptで一意の配列にマップするにはどうすればよいですか? 質問する

重複した値を持つ配列をJavascriptで一意の配列にマップするにはどうすればよいですか? 質問する

次の配列があります:

var tst = 
[
 {"topicId":1,"subTopicId":1,"topicName":"a","subTopicName":"w"},
 {"topicId":1,"subTopicId":2,"topicName":"b","subTopicName":"x"},
 {"topicId":1,"subTopicId":3,"topicName":"c","subTopicName":"y"},
 {"topicId":2,"subTopicId":4,"topicName":"c","subTopicName":"z"}
]

topicId > id および topicName > name のような配列にこれをマップする簡単な方法はありますか:

var t = 
[
  {"id":1,"name":"a"},
  {"id":2,"name":"c"}
]

私は最新のブラウザを使用しており、役に立つなら _lodash も使用しています。tst 配列には約 100 行あるため、非常に最適化されたソリューションは必要ないことに注意してください。シンプルで保守しやすいソリューションの方が重要です。

ベストアンサー1

最も最近の

_.uniqBy が推奨されるようになりました

完全な動作例はこちら

var tst = [
 {"topicId":1,"subTopicId":1,"topicName":"a","subTopicName1":"w"},
 {"topicId":2,"subTopicId":2,"topicName":"b","subTopicName2":"x"},
 {"topicId":3,"subTopicId":3,"topicName":"c","subTopicName3":"y"},
 {"topicId":1,"subTopicId":4,"topicName":"c","subTopicName4":"z"}
];

var result = _.map(_.uniqBy(tst, 'topicId'), function (item) {
    return {
        id: item.topicId,
        name: item.topicName
    };  
});

console.log(result);

遺産

http://lodash.com/docs#uniq良いスタートだ

_.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');

IDで一意のトピックを取得するには、コードは次のようになります。

var t = _.uniq(tst, 'topicId');

編集

jsfiddleを作りました

http://jsfiddle.net/q5HNw/

アップデート

名前の不要な一意性を削除

http://jsfiddle.net/q5HNw/1/

おすすめ記事