2016-06-28 6 views
2

JSON項目をフィルタリングし、組み合わせるしようとすると:は、私はこのフォーマットを持つ複数のオブジェクトをJSONを持って

[{ 
    "id":14, 
    "friendlyName":"NameOfPlace 1", 
    "lat":30.402735, 
    "lon":-90, 
    "address":"1 place street", 
    "city":"NYC", 
    "state":"NY", 
    "zipCode":"12346", 
    "locationCode":"MQ00003", 
    "details":"in the bank" 
}, 
{ 
    "id":15, 
    "friendlyName":"NameOfPlace 2", 
    "lat":30.402735, 
    "lon":-90, 
    "address":"1 place street", 
    "city":"NYC", 
    "state":"NY", 
    "zipCode":"12346", 
    "locationCode":"MQ00003", 
    "details":"near ATM" 
}] 

彼らは、店舗の場所です。私はこれらのいくつかをリストに入れています。同じ建物内に2つの場所がある場合、名前1と名前2のような名前があります。私は両方の値を1つのオブジェクト(例の場合は "名前")で1つのオブジェクトに結合する方法を見つけようとしています。上記のようなオブジェクトのリストを持っていれば、friendlyNameに基づいてアルファベット順に並べ替え、1つのオブジェクトに結合できる類似の名前の場所があるかどうかを調べることができます。場所には、長さとアドレスが同じで、詳細とIDが異なるだけです。私はそれを線形に行う方法を理解するだけで、私がやろうとしているモバイルアプリにとっては非常に遅いです。

+0

使用 '。 – Venky

+0

あなたは間違いなくunderscore.jsを使用できます。しかし、すべてでは必要ありません。単純に 'sort'メソッドを使います。 –

+0

並べ替えはかなり簡単でした。チェックはどうですか?場所は常に数字で終わります。私の即時しかし、最後に整数をチェックし、リストの次のいくつかを検索し、それらが整数スポットまで同じ文字列値を持っているかどうかを確認し、その詳細を取って最初のオブジェクトに追加することです。 – Peter

答えて

2

を使用することによってそれを行うことができますフレンドリーネームのオフに基づいてすることができますフレンドリ名を作成し、データを含む新しい配列を生成します。データが異なる場合は、すべての値が配列に含まれます。

var data = [{ "id": 14, "friendlyName": "NameOfPlace 1", "lat": 30.402735, "lon": -90, "address": "1 place street", "city": "NYC", "state": "NY", "zipCode": "12346", "locationCode": "MQ00003", "details": "in the bank" }, { "id": 15, "friendlyName": "NameOfPlace 2", "lat": 30.402735, "lon": -90, "address": "1 place street", "city": "NYC", "state": "NY", "zipCode": "12346", "locationCode": "MQ00003", "details": "near ATM" }], 
 
    grouped = []; 
 

 
data.forEach(function (o) { 
 
    var key = o.friendlyName.split(/(?= \d*$)/)[0]; 
 
    if (!this[key]) { 
 
     this[key] = { Name: key }; 
 
     grouped.push(this[key]); 
 
    } 
 
    Object.keys(o).forEach(function (k) { 
 
     if (!(k in this[key])) { 
 
      this[key][k] = o[k]; 
 
      return; 
 
     } 
 
     if (this[key][k] === o[k]) { 
 
      return true; 
 
     } 
 
     if (Array.isArray(this[key][k])) { 
 
      this[key][k].push(o[k]); 
 
      return; 
 
     } 
 
     this[key][k] = [this[key][k], o[k]]; 
 
    }, this); 
 
}, Object.create(null)); 
 

 
console.log(grouped);

あなたはそれをすべて行うことができますunderscore.js`
+0

を取るだけです。それはちょうど配列ではなく、1つのid値を持っていますか?ビューにアクセスするにはid値を使用する必要があります。 – Peter

+0

の場合は、 'Array#join( '、')'を実行してすべてのIDをコンマで区切って取得するのが最も簡単です。 –

1

私はアルファベット順にソート

あなたがsort方法あなたはのグループ化のためのハッシュテーブルを使用することができ

var sortedArray = json.sort(function(a,b){ 
    return a.friendlyName>b.friendlyName?1:-1 
}) 

JSFIDDLE

関連する問題