2017-04-19 52 views
0

我有一個JSON字符串,它可能包含重複信息,除了價格水平的關鍵。如何迭代通過JSON和有選擇地克隆部分

[{ 
    "id": "368", 
    "type": "inventoryitem", 
    "cols": { 
     "id": "04-PD", 
     "name": "Product 1", 
     "salesdescription": "Product 1", 
     "type": { 
      "name": "Inventory Item", 
      "internalid": "InvtPart" 
     } 
     "internalid": { 
      "name": "368", 
      "internalid": "368" 
     }, 
     "unitprice": 50.00, 
     "pricelevel": { 
      "name": "pricelevel1", 
      "internalid": "1" 
     } 
    } 
}, { 
    "id": "368", 
    "recordtype": "inventoryitem", 
    "columns": { 
     "itemid": "04-PD", 
     "displayname": "Product 1", 
     "salesdescription": "Product 1", 
     "type": { 
      "name": "Inventory Item", 
      "internalid": "InvtPart" 
     }, 
     "internalid": { 
      "name": "368", 
      "internalid": "368" 
     }, 
     "unitprice": 35.29, 
     "pricelevel": { 
      "name": "pricelevel2", 
      "internalid": "12" 
     } 
    } 
}] 

什麼我試着搞清楚的是,有一個簡單的方法是通過對象和克隆鍵循環被映射到pricelevel與1

,並刪除不物品internalid?

因爲有可能是這一套幾百,即時通訊希望有克隆並去掉什麼,我不需要一個簡單的方法..

任何提示不勝感激

+0

當你說克隆你是什麼意思,但複製保持相同的數據中或提取?或者簡單地刪除不是1的內部ID的東西? –

+3

您的物品沒有相同的鑰匙 – Weedoze

+0

您想要做這件事嗎? - 'let myItems = JSON.parse(yourJson).filter(item => item.columns.internalid.internalid ==「1」);'。請注意,您有具有不同屬性「cols」和「columns」的對象。此外,如果您反序列化JSON然後進行過濾,我不會看到克隆的原因。 – andreim

回答

0

我試圖提供遞歸有選擇地克隆的邏輯。讓我知道這是你在找什麼。

var json = 
 
[{ 
 
    "id": "368", 
 
    "type": "inventoryitem", 
 
    "cols": { 
 
     "id": "04-PD", 
 
     "name": "Product 1", 
 
     "salesdescription": "Product 1", 
 
     "type": { 
 
      "name": "Inventory Item", 
 
      "internalid": "InvtPart" 
 
     }, 
 
     "internalid": { 
 
      "name": "368", 
 
      "internalid": "368" 
 
     }, 
 
     "unitprice": 50.00, 
 
     "pricelevel": { 
 
      "name": "pricelevel1", 
 
      "internalid": "1" 
 
     } 
 
    } 
 
}, { 
 
    "id": "368", 
 
    "recordtype": "inventoryitem", 
 
    "columns": { 
 
     "itemid": "04-PD", 
 
     "displayname": "Product 1", 
 
     "salesdescription": "Product 1", 
 
     "type": { 
 
      "name": "Inventory Item", 
 
      "internalid": "InvtPart" 
 
     }, 
 
     "internalid": { 
 
      "name": "368", 
 
      "internalid": "368" 
 
     }, 
 
     "unitprice": 35.29, 
 
     "pricelevel": { 
 
      "name": "pricelevel2", 
 
      "internalid": "12" 
 
     } 
 
    } 
 
}]; 
 

 
function getMatchParentChildKeyVal(json, parentKey, matchKey, matchVal) { 
 

 
    var out = []; 
 
    
 
    for (var i = 0 ; i < json.length; i++) { 
 
    
 
    var matchRecord = parseMatchParent(json[i],null,parentKey); 
 
    if (matchRecord) { 
 
     if (matchRecord[matchKey] == matchVal) { 
 
      out.push(json[i]); 
 
     } 
 
    } 
 
    } 
 
    return out; 
 
} 
 
    
 
function parseMatchParent(tree, parent, match) { 
 
    
 
    for (var k in tree){ 
 
    if (tree.hasOwnProperty(k)) { 
 
     if (k == match) return tree[k]; 
 
     else if (typeof tree[k] == 'object') { 
 
      var childMatch = parseMatchParent(tree[k],k, match); 
 
      if (childMatch) return childMatch; 
 
      } 
 
    } 
 
    } 
 
    return false; 
 
} 
 
    
 
console.log(getMatchParentChildKeyVal(json,"pricelevel","internalid",'1'));

+0

這真是太棒了,這正是我想要做的,並且也爲我打開了一些東西學習 – user125264

+0

謝謝@ user125264。不用謝。 –