2017-05-07 8 views
0

私はGETリクエストから取得したJsonオブジェクトの 'text'キーの値をtwitライブラリ経由で取得しようとしています。有効な条件でarray.filterを使用するときに同じオブジェクトを取得する

私は関数型プログラミングをしたいので、私は配列上でフィルタ関数を使用しようとしています。

IはT.get関数にコールバック関数内でJSONオブジェクトを使用することができます。

const gotData = function(err, data, response) { 
console.log(data) 
} 

T.get('search/tweets', params , gotData) 

は、それからアレイである状態のそれぞれのテキストキーにのみ値をフィルタリングします

let results = data.statuses.filter(
    function(result){ return result.hasOwnProperty('text') 
}) 

しかし、私は戻って同じdata.statusesを取り戻す...:オブジェクト

のだから私はこれを試してみましたか?

オブジェクトのテキストキーの値だけを取得したいのですが、何が間違っていますか?

これは私の全体のコードです:

const Twit = require('twit') 
const config = require('./config') 
const T = new Twit(config) 

let params = { q: 'drum', count: 2 } 

const gotData = function(err, data, response) { 
    let results = data.statuses.filter(function(result){ return result.hasOwnProperty('text')}) 
    console.log(results) 
} 

T.get('search/tweets', params , gotData) 

そして、このgotData機能上のデータに対応して私が取得JSONレスポンスのサンプル:あなたはちょうど

{ statuses: 
    [ { created_at: 'Sun May 07 11:35:16 +0000 2017', 
     id: 861182642888343600, 
     id_str: '861182642888343552', 
     text: '@was_going \nEvery hunk bore seven drums,\nEvery drum owned seven drums…', 
     truncated: false, 
     entities: [Object], 
     metadata: [Object], 
     source: '<a href="http://cheapbotsdonequick.com" rel="nofollow">Cheap Bots, Done Quick!</a>', 
     in_reply_to_status_id: 861181362954489900, 
     in_reply_to_status_id_str: '861181362954489856', 
     in_reply_to_user_id: 795028044758949900, 
     in_reply_to_user_id_str: '795028044758949888', 
     in_reply_to_screen_name: 'was_going', 
     user: [Object], 
     geo: null, 
     coordinates: null, 
     place: null, 
     contributors: null, 
     is_quote_status: false, 
     retweet_count: 0, 
     favorite_count: 0, 
     favorited: false, 
     retweeted: false, 
     lang: 'en' }, 
    { created_at: 'Sun May 07 11:35:09 +0000 2017', 
     id: 861182610596405200, 
     id_str: '861182610596405248', 
     text: 'Would you rather have Data storage or A pedal assembly for a bass drum or high hat cymbals?', 
     truncated: false, 
     entities: [Object], 
     metadata: [Object], 
     source: '<a href="http://cheapbotsdonequick.com" rel="nofollow">Cheap Bots, Done Quick!</a>', 
     in_reply_to_status_id: null, 
     in_reply_to_status_id_str: null, 
     in_reply_to_user_id: null, 
     in_reply_to_user_id_str: null, 
     in_reply_to_screen_name: null, 
     user: [Object], 
     geo: null, 
     coordinates: null, 
     place: null, 
     contributors: null, 
     is_quote_status: false, 
     retweet_count: 0, 
     favorite_count: 0, 
     favorited: false, 
     retweeted: false, 
     lang: 'en' } ], 
    search_metadata: 
    { completed_in: 0.034, 
    max_id: 861182642888343600, 
    max_id_str: '861182642888343552', 
    next_results: '?max_id=861182610596405247&q=drum&count=2&include_entities=1', 
    query: 'drum', 
    refresh_url: '?since_id=861182642888343552&q=drum&include_entities=1', 
    count: 2, 
    since_id: 0, 
    since_id_str: '0' } } 

答えて

1

theresのかどうかを確認しますテキストプロパティまた、そのプロパティにマップすることができます:

let results = data.statuses.filter(
    result=>result.hasOwnProperty('text') 
).map(result=>result.text); 

http://jsbin.com/niwezocuhu/edit?console

それとも、パフォーマンス(代わりにOのO(N)(N + N * R))に世話をする場合:

+0

ありがとう、1つの質問、どのようにこの例で来る:https://youtu.be/BMUiFMZr7vk?t=7m55sそこにマップする必要はありません、そこに、それはちょうど条件をチェックしていると、 '犬'取得新しいフィルタリングされた配列が割り当てられましたか?しかし、ここで私はそれをマップする必要がありますか? –

+0

@GiorgioMartini彼は決して出力を表示しません...そしてはい、フィルタは動作しますが、オブジェクトの配列を取得します。 –

関連する問題