2017-05-07 1 views
0

J'essaie d'obtenir la valeur de la clé 'texte' dans un objet Json que je reçois d'une requête GET à twitter via la bibliothèque twit. J'essaye d'utiliser la fonction de filtre sur le tableau parce que je veux faire la programmation fonctionnelle.Obtention du même objet lors de l'utilisation du tableau.filter avec une condition valide

Je peux utiliser l'objet JSON dans une fonction de rappel sur la fonction T.get:

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

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

Ensuite, je veux filtrer seulement la valeur de la clé de texte sur chacun des statuts, qui est un tableau des objets

donc j'ai essayé ceci:

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

Mais je reviens en arrière les mêmes data.statuses ...? Je veux obtenir seulement la valeur des touches de texte sur les objets, qu'est-ce que je fais mal de je?

ceci est mon code tout:

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) 

Et ce d'un échantillon de la réponse JSON je reçois, ce qui correspond aux données sur la fonction gotData:

{ 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' } } 

Répondre

1

Vous vérifiez simplement s'il y a une propriété de texte. Vous pouvez également mapper à cette propriété:

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

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

Ou si vous prenez soin de la performance (O (n) au lieu de O (n + n * r)):

+0

Merci, une question cependant, comment se fait-il dans cet exemple: https://youtu.be/BMUiFMZr7vk?t=7m55s il n'y a pas besoin de cartographier, là, il suffit de vérifier une condition, et «chiens» obtient assigné un nouveau tableau filtré? mais ici, je dois le cartographier? –

+0

@GiorgioMartini il ne montre jamais la sortie ... et oui, le filtre fonctionne, mais alors vous obtenez un tableau d'objets de retour ... –