2016-06-28 47 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" 
}] 

他們店的位置。我在列表中列出了其中的幾個。如果同一建築物內有兩個位置,其中一些名稱的名稱如名稱1和名稱2。我試圖找到一種方法將它們組合成一個對象,並且這兩個值都只有一個地方(在這個例子中是「Name」)。我有兩個問題,如果我有上述對象列表,我可以根據friendlyName按字母順序排序,然後檢查是否有類似的命名位置可以合併爲一個對象。請注意,這些地點將具有相同的經緯度和地址,只是不同的細節和ID。我只能弄清楚它是如何線性處理的,而且我嘗試去做的移動應用程序的速度非常慢。

+0

使用'underscore.js'你可以做到這一切。 – 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);

+0

所以它的工作原理,但你會如何做到這一點它只有一個id值,而不是數組?我需要使用id值來訪問視圖。只要將它默認爲較小的值將是最簡單的 – Peter

+0

,您可以對其執行'Array#join(',')'並獲取以逗號分隔的所有ID。 –

1

我可以排序基於關閉的friendlyName的字母順序

您可以通過使用sort方法

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

JSFIDDLE