簡體   English   中英

Javascript數組無法作為數組訪問

[英]Javascript array is not accessible as an array

我正在使用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文檔回讀了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'
}

謝謝您的幫助!

結果是一個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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM