连接对象和键值并获取长度

时间:2016-09-23 19:21:27

标签: javascript jquery json

以下是我尝试访问密钥并获取长度的示例数据,'xxxxxx20160929'密钥是动态的:

"resultData": [{
    "a": "124",
    "b": "0",
    "c": "0",
    "d": {
        "e": "6",
        "f": "en",
        "xxxxxx20160929": [{
            "ID": "yyyyyyyy"
        },
        {
            "ID": "fffff"
        }
     ]
    }
}]

以下是我尝试的代码:

var m = 1;
var schedule = [];
// looping to get key value 'xxxxxx20160929' 
$.each(response.resultData['0'].d, function(key, value) {
    if (m == 3) {
        //got value 'xxxxxx20160929'   
        schedule.push(key);
        //trying to check the length of 'xxxx20160929'     
        console.log(response.resultData['0'].d.key.length);
    }
    m++;
});

我的预期输出是2,因为'xxxxxx20160929'循环2次。

4 个答案:

答案 0 :(得分:0)

要获取对象中的数字ob项,您不能使用" length"它用于数组,对于你可以使用的对象

Object.keys(response.resultData['0'].d).length

Object.keys(response.resultData['0'].d[key]).length

UDP:

刚收到你的问题:)

访问动态对象键使用[]访问它们

d[key]

答案 1 :(得分:0)

请遵循以下内容,您不必使用如此多的代码

resultData[0].d[Object.keys(resultData[0].d)[2]].length

答案 2 :(得分:0)

这假设可以在 d 对象中的固定位置找到感兴趣的动态键始终。这非常脆弱。如果有更好的方法来发出密钥信号(例如它始终以“xxxxxx”开头,那么我将更新。

<强>更新 我通过 NEWYORKBOMDEL20160929

的示例键,根据您的评论将有趣键的测试更改为一个以8位数字结尾的字符串(可能是您的日期)

var data = {
  "resultData": [
    {
      "a": "124",
      "b": "0",
      "c": "0",
      "d": {
          "e": "6",
          "f": "en",
          "xxxxxx20160929": [
            {"ID": "yyyyyyyy" },
            {"ID": "fffff"}
         ]
      }
    }
  ]
};

data.resultData.forEach(function(item){
  var _key = Object
               .keys(item.d)
               .filter(function(x){ return /\d{8}$/.test(x); })[0];

  var _value = item.d[_key];
  
  console.log("Key: " + _key);
  console.log("Children: " + _value.length);
  
  _value.forEach(function(child){
    var _childKey = Object.keys(child)[0];
    var _childValue = child[_childKey];

    console.log("   Key: \"" + _childKey + "\" Value: \"" + _childValue + "\"");
  });

});

答案 3 :(得分:0)

如果要查找具有特定长度的密钥,可以执行以下操作:

$.each(response.resultData['0'].d, function(key, value) {
    if (key.length == 14) {
        schedule.push(key);
        console.log(key, value);
    }
    m++;
});