2017-05-24 8 views
-2

私は以下のような配列を持っています。出発地と到着地の中のどの値を知りたいですか?JavascriptのコレクションはLodashで値を見つける

アレイ:

[ "AYT"、 "IST"、 "ESB"、 "ADB"]

がどのように私は扱うことができ

:私はこのような新しい配列にしたい

var data = { 
    "origin": "Antalya", 
    "destination": "IST", 

    "flights": [{ 
     "provider": "thy", 
     "time": "2017-07-07 10:30", 
     "legs": [{ 
      "departure": "AYT", 
      "arrival": "IST" 
     }] 
    },{ 
     "provider": "thy", 
     "time": "2017-07-07 14:30", 
     "legs": [{ 
      "departure": "AYT", 
      "arrival": "ESB" 
     },{ 
      "departure": "ESB", 
      "arrival": "IST" 
     }] 
    },{ 
     "provider": "pegasus", 
     "time": "2017-07-07 06:30", 
     "legs": [{ 
      "departure": "AYT", 
      "arrival": "ADB" 
     },{ 
      "departure": "ADB", 
      "arrival": "IST" 
     }] 
    }] 
}; 

それはロダッシュを使用していますか?

答えて

2

はここ液を用いlodashです最初に、脚の平坦な配列を取得し、各脚のプロパティの値の平坦な配列に変換してから、最終的にユニークな値を取得します値。

+0

配列の各要素をマニピュレータ関数に渡したい場合は、通常はフラットマップを使用します。この場合は必要ありません。ここでflattenを使用してください。上記の答えを参照してください。 – FrankCamara

+0

フライトアレイから足を引き抜きたいので、 'flatMap'が必要です。 flattenは、この場合は 'data.flights'となる1つのパラメータを取るので、flattenを使用するソリューションは機能しません。第2のパラメータとしてflatMapに渡される '' legs''は無視されます。 –

+0

本当にありがとう、それは素晴らしいです –

2

まあ、あなたのデータをループし、文字列配列を作成し、同様に、uniqの機能を使用します。

let result = _(data.flights) 
    .flatMap('legs') 
    .flatMap(_.values) 
    .uniq() 
    .value(); 

var data = {"origin":"Antalya","destination":"IST","flights":[{"provider":"thy","time":"2017-07-07 10:30","legs":[{"departure":"AYT","arrival":"IST"}]},{"provider":"thy","time":"2017-07-07 14:30","legs":[{"departure":"AYT","arrival":"ESB"},{"departure":"ESB","arrival":"IST"}]},{"provider":"pegasus","time":"2017-07-07 06:30","legs":[{"departure":"AYT","arrival":"ADB"},{"departure":"ADB","arrival":"IST"}]}]}; 
 

 
var legs = []; 
 
_.each(data.flights, flight => { 
 
    _.each(flight.legs, leg => { 
 
    legs.push(leg.departure); 
 
    legs.push(leg.arrival); 
 
    }); 
 
}); 
 

 
console.log(_.uniq(legs));
<script src="https://cdn.jsdelivr.net/lodash/4.17.4/lodash.min.js"></script>

+0

あなたの答えはありがたいですが、lodashメソッドの方が簡単ですか? :) –

+0

Flattenを使用したソリューションが動作しません。以下の私のコメントを参照してください。 –

+0

私は自分のjsFiddle:S https://jsfiddle.net/hk1key5v/で間違ったロダッシュバージョンを使用していたことに気がつきました。 – FrankCamara

関連する問題