【问题标题】:Javascript array is not accessible as an arrayJavascript 数组不能作为数组访问
【发布时间】:2017-01-09 11:15:38
【问题描述】:

我正在使用 twitter API,但遇到了一个非常令人困惑的问题。

我有以下脚本:

const Twitter = require('twitter-api-stream')
const twitterCredentials = require('./credentials').twitter

const twitterApi = new Twitter(twitterCredentials.consumerKey, twitterCredentials.consumerSecret, function(){
    console.log(arguments)
})

twitterApi.getUsersTweets('everycolorbot', 1, twitterCredentials.accessToken, twitterCredentials.accessTokenSecret, (error, result) => {
    if (error) {
        console.error(error)
    }
    if (result) {
        console.log(result) // outputs an array of json objects
        console.log(result.length) //outputs 3506 for some reason (it's only an array of 1)
        console.log(result[0]) // outputs a opening bracket ('[')
        console.log(result[0].text) // outputs undefined
    }
})

调用以下函数与twitter交互:

TwitterApi.prototype.getUsersTweets = function (screenName, statusCount, userAccessToken, userRefreshToken,cb ) {
    var count = statusCount || 10;
    var screenName = screenName || "";

    _oauth.get(
        "https://api.twitter.com/1.1/statuses/user_timeline.json?count=" + count + "&screen_name=" + screenName
        , userAccessToken
        , userRefreshToken
        , cb
    );
};

似乎我得到了我想要的结果。当我记录结果本身时,我得到以下输出:

[
  {
    "created_at": "Thu Sep 01 13:31:23 +0000 2016",
    "id": 771339671632838656,
    "id_str": "771339671632838656",
    "text": "0xe07732",
    "truncated": false,
    ...
  }
]

太棒了,一组推文限制为 1 条推文。

我遇到的问题是当我尝试访问这个数组时。

console.log(result.length) //outputs 3506 for some reason (it's only an array of 1)
console.log(result[0]) // outputs a opening bracket ('[')
console.log(result[0].text) // outputs undefined

我阅读了api docs for the user_timeline,但除非我完全错过了它,否则我没有看到任何提及特殊输出的内容。

有什么想法吗?

更新

感谢@nicematt 指出这个答案。

为了详细说明解决方案,我将代码更新为此,现在我得到了我想要的结果:

if (result) {
    let tweet = JSON.parse(result)[0] // parses the json and returns the first index
    console.log(tweet.text) // outputs '0xe07732'
}

感谢您的帮助!

【问题讨论】:

  • JSON.parse(results)
  • 看来result是字符串,可能是JSON字符串?
  • 是的,这可能就是长度返回 3506 的原因。

标签: javascript arrays json twitter


【解决方案1】:

结果是 String 并且您正在索引它(result[0](而 0 被转换为字符串)几乎与 result.charAt(0) 相同),这就是为什么 result[0] 等于"["–因为它是其中指定的第一个字符。您忘记将结果解析为 JSON 数据。

JSON.parse(result).length // probably 1

result.textundefined,因为result(一个字符串)就像一个Object(但不是instanceof)并且允许查找和getter 本身发生。

我也会展示str[0]str.charAt(0) 之间的区别:

str[0] // same as str['0'], but a getter. 0 converts to
       // string (because every key of an object
       // is string in ECMAScript)

str.charAt(0) // get/lookup String#charAt, call it
              // without new `this` context and with arguments list: 0

【讨论】:

  • 这是我编写的第一个仅限终端的工具之一。我习惯于在浏览器的控制台中看到该字符串并看到它是一个字符串。感谢您指出了这一点。我将其添加到我的“记住”列表中:)
猜你喜欢
  • 2023-03-17
  • 1970-01-01
  • 2012-08-08
  • 1970-01-01
  • 1970-01-01
  • 2011-05-02
  • 1970-01-01
  • 1970-01-01
  • 2014-06-16
相关资源
最近更新 更多