【问题标题】:How can I access properties inside objects inside other objects in javascript如何在javascript中访问其他对象内的对象内的属性
【发布时间】:2013-10-15 19:40:54
【问题描述】:

我正在尝试访问存储在数组中的每个对象的文本属性。该数组是对象内部另一个属性 results 的值。

我使用 jQuery 从服务器检索对象,就像这样。

       $.ajax({
       url: "https://api.parse.com/1/classes/chats",
       cache: false,
       type: 'get',
       async: false,
       success: function(data){
            console.log(data);
        }
       });

最后的日志语句是看看我收到了什么。当然,这是我需要做某事的地方,但我似乎无法破解密码。所以,我有一个带有 result 属性和 Array 值的对象。数组是一个对象数组,每个对象都有自己的属性。我只是有点困惑如何获得我需要的东西。也许是朝着正确的方向轻轻推动?

Object {results: Array[10]} //object returned

results: Array[10] //value is an array of objects

0: Object           // object '0' expanded...

createdAt: "2013-10-15T19:13:43.576Z"<br><br>
objectId: "uzGerloXA7"
text: "RoboChat: I'm sorry Dave, I can't allow you to do that." // I need this!
updatedAt: "2013-10-15T19:13:43.576Z"
username: "RoboChat"

1:Object   // and I need it for each of these objects.
2:Object
3:Object
etc...
9:Object   //this is the last object.

【问题讨论】:

  • 我推荐使用像 Firebug for Firefox 这样的工具,它可以让你设置断点和检查对象。非常适合学习和调试

标签: javascript jquery ajax arrays object


【解决方案1】:

你想要

data.results[0].text

[] 将让您获取数组的单个元素

. 可以让您获取任何对象的属性。

你可能需要一个循环:

for (var i = 0; i < data.results.length; ++i) {
    console.log(data.results[i].text);
}

【讨论】:

  • 为了帮助我澄清,我的想法是“结果”是一个具有一个值的属性,一个包含 10 个对象的数组。如果它只有一个值(并且该值有 10 个属性——每个属性都有一些对应的值),那么如何在“结果”上使用括号表示法(即,为什么结果 [1] 不返回未定义,因为有只有一项,一个数组)。您的代码有效,我只是想理解它。
  • 展开,在我的脑海里应该是data.results.array[i].text。为什么这是错误的?
  • @keith 您在日志中看到的第一条消息是说您正在记录的(数据)包含一个属性,称为结果,它是一个包含十个元素的数组。当然,一旦你处理了数组,索引到 10 应该更有意义。如果您在控制台上玩得更多,可能会更有意义,例如键入data.resultsdata.results[3]
  • 感谢 Scott 的回答和反馈。当然,'results' 实际的数组。我不知道为什么我没有得到那个。问题是我认为缺乏理解属性和值之间的关系,因为现在回想起来,问题(和答案)实际上非常简单。干杯!
【解决方案2】:

只需指定数组索引后跟属性名称:

data.results[0].propName;

要迭代,你可以这样做:

//Iterate the array of objects
for (var i = 0; i < data.results.length; i++) {
    //Iterate over the keys of a specified object
    for (var key in data.results[i]) {
        if (data.results[i].hasOwnProperty(key))
            console.log(data.results[i][key]);
    }
}

【讨论】:

  • jslint 会抱怨没有 hasOwnProperty 检查 ;)
【解决方案3】:

你可以做一些迭代,比如:

   var allText = [];
    $.each(data.results,function(i,obj){
      allText.push(obj.text);
    });

所有文本都存储在allText ah和它的jquery moe中

【讨论】:

  • 假设使用了 jquery
  • 确实 - 这是一个公平的假设 :)
  • John,从问题data 中的信息来看,似乎只包含一个东西,一个名为results 的属性,它是一个对象数组。在任何情况下你都应该说this.text,因为$(this).text 会引用jQuery 的.text() 方法...
猜你喜欢
  • 1970-01-01
  • 2018-07-07
  • 2011-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-20
  • 1970-01-01
  • 2023-03-23
相关资源
最近更新 更多