访问一个对象属性而不知道它的父对象是for for循环

时间:2016-07-17 03:58:30

标签: javascript ajax

我正在尝试访问从外部API检索的值。具体来说,它是一个缩短的URL。缩短器使用长URL将其作为对象本身保存在对象中,并将缩短的URL放在此对象中(参见屏幕截图)。

我不知道长URL的确切值,所以我尝试使用for循环来访问shortUrl(因为我知道它总是名称,如果它是键),现在打印到控制台。

我得到undefined,[object,object]或null的变体。

这里缺少什么?

    longUrl = "longUrl=" + longUrl;
    $.ajax({
        type: 'get',
        dataType: 'jsonp',
        url:'http://api.shortswitch.com/shorten?apiKey=3f5f69733156cce575b9a7ab1783ff4f4f0a8b5c&format=json&',
        crossDomain: true,
        data: longUrl, 
        success:  function(data){
            for (var shortUrl in data){
                if(data.hasOwnProperty(shortUrl)) {
                    console.log(data[shortUrl]);
                }
                
            }
            
        }
});
 

enter image description here

2 个答案:

答案 0 :(得分:2)

请尝试使用data.results代替data

var shortURLs = [];
for(var key in data.results) {
    shortURLs.push(data.results[key].shortUrl);
}
console.log(shortURLs);

<强>演示:

&#13;
&#13;
var longUrl = {longUrl: "http://stackoverflow.com/questions/38417777/accessing-an-object-property-without-knowing-its-parent-with-a-for-in-loop/38417810#38417810"};
$.ajax({
        type: 'GET',
        dataType: 'jsonp',
        url:'http://api.shortswitch.com/shorten?apiKey=3f5f69733156cce575b9a7ab1783ff4f4f0a8b5c&format=json&',
        crossDomain: true,
        data: longUrl, 
        success:  function(data){
            var shortURLs = [];
            for(var key in data.results) {
              shortURLs.push(data.results[key].shortUrl);
            }
            console.log(shortURLs);
        }
  });
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您似乎走在正确的轨道上,遍历对象的属性并访问该密钥。根据您的示例数据,您应该检查data.result而不是data

以下是一个示例plunkr:https://plnkr.co/edit/7De7ZVPHz7x2n1OcKXmi?p=info

以下是相关代码:

var data = {
  errorMessage: "",
  statusCode: "OK",
  errorCode: "0",
  results: {
    "http://hello?cmp=EXP:da:paid::320x50": {
      hash: "B3uXHF",
      shortUrl: "http://at.law.com/B3uXHf",
      longUrl: "http://hello?cmp=EXP:da:paid::320x50"
    }
  }
};

function getShortURL(data) {
  for (var property in data.results) {
    if (data.results.hasOwnProperty(property)) {
      return data.results[property].shortUrl;
    }
  }
}

console.log(getShortURL(data));

由于您不知道longUrl,因此您只需访问该对象的子属性即可访问shortUrl键。你真的只是遍历对象的索引。