【问题标题】:Loop through dynamic object - Jquery循环遍历动态对象 - Jquery
【发布时间】:2018-09-26 19:35:40
【问题描述】:

我知道这可以很容易地完成,我只是想不通。我有一个由 SPARQL 查询生成的动态对象。它像这样返回 JSON:

data = {
    "p": { "type": "uri" , "value": "http://www.company.com/PDE/SpecGuide#MatrixColumn" } ,
    "o": { "type": "literal" , "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "value": "1" } ,
    "obj": { "type": "uri" , "value": "http://www.company.com/PDE/SpecGuide#airtouch" } ,
    "lbl": { "type": "literal" , "value": "Airtouch" }
  } ,
  {
    "p": { "type": "uri" , "value": "http://www.company.com/PDE/SpecGuide#MatrixRow" } ,
    "o": { "type": "literal" , "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "value": "1" } ,
    "obj": { "type": "literal" , "value": "Smooth_Paint" } ,
    "hdr": { "type": "literal" , "datatype": "http://www.w3.org/2001/XMLSchema#boolean" , "value": "true" }
  } 

我唯一关心的是键和value['value']所以我需要过滤掉其余的。最终,我正在寻找这个:

data = [
{1: {p: "http://www.company.com/PDE/SpecGuide#MatrixColumn",
     o: "1", 
     obj : "Smooth_Paint"} ,
{2 : {p: "http://www.company.com/PDE/SpecGuide#MatrixColumn",
     o: "1", 
     obj : "other_values"}
     otherKey: "more_values}
]

这让我发疯,因为我知道这并不是特别困难,但我无法弄清楚。我尝试了

的变体
$.each(data, function(key,valueObj){
   data.key = {key: valueObj.value};
   list.push(data)
});

但我最终得到了这样的变体:

{1:{key: "http://www.company.com/PDE/SpecGuide#MatrixColumn"}}
{2: {key: "1"}}
{3:{key: "http://www.company.com/PDE/SpecGuide#airtouch"}}
{4:{key: "Airtouch"}}

【问题讨论】:

    标签: jquery loops object


    【解决方案1】:

    $.each() 回调中的第一个变量始终是索引。

    您可以使用for...in 来获取附加到对象本身的属性hasOwnProperty()See more

    var data = [{
        "p": { "type": "uri" , "value": "http://www.company.com/PDE/SpecGuide#MatrixColumn" } ,
        "o": { "type": "literal" , "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "value": "1" } ,
        "obj": { "type": "uri" , "value": "http://www.company.com/PDE/SpecGuide#airtouch" } ,
        "lbl": { "type": "literal" , "value": "Airtouch" }
      } ,
      {
        "p": { "type": "uri" , "value": "http://www.company.com/PDE/SpecGuide#MatrixRow" } ,
        "o": { "type": "literal" , "datatype": "http://www.w3.org/2001/XMLSchema#integer" , "value": "1" } ,
        "obj": { "type": "literal" , "value": "Smooth_Paint" } ,
        "hdr": { "type": "literal" , "datatype": "http://www.w3.org/2001/XMLSchema#boolean" , "value": "true" }
      }]
      var list = [];
      $.each(data, function(index, obj){
        var newData = {}
        for(key in obj){
            if(obj.hasOwnProperty(key))
            {
                newData[key] = obj[key]['value']
            }
        }
        var data = {}
        data[list.length+1] = newData
        list.push(data)
      })
      console.log(list)
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

    【讨论】:

    • 差不多了!我编辑了我的预期结果。每个键值都需要附加到它来自的相同索引。所以前四个是 {1: {.....}},接下来的四个是 {2:{....}}。
    • 你是救生员!我无法弄清楚这一点。谢谢!
    猜你喜欢
    • 2014-11-30
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2017-01-29
    • 1970-01-01
    • 2020-06-09
    • 2017-01-23
    • 2021-10-05
    相关资源
    最近更新 更多