2017-04-19 93 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。不用谢。 –