2016-01-23 75 views
3

我做一個簡單的Twitter應用程式,在我的javascript工作。 下面的代碼應該識別每鳴叫位置和計數每個位置的鳴叫的次數。使用Javascript - 創建一個新的數組,而不是遞增

但是,它並沒有增加,只是創建新的數組。 我的代碼有什麼問題?我怎樣才能讓它變得更好?

謝謝你,你認爲這是

var Twitter = require('node-twitter'), 
twit = {}, 
loc = []; 

twit.count = 0; 


var twitterStreamClient = new Twitter.StreamClient(
//credentials 
); 

twitterStreamClient.on('close', function() { 
    console.log('Connection closed.'); 
}); 
twitterStreamClient.on('end', function() { 
    console.log('End of Line.'); 
}); 
twitterStreamClient.on('error', function (error) { 
    console.log('Error: ' + (error.code ? error.code + ' ' + error.message : error.message)); 
}); 
twitterStreamClient.on('tweet', function (tweet) { 


    if (loc.indexOf(tweet.user.location) === -1) { 
     loc.push({"location": tweet.user.location, "locCount": 1}); 
    } else { 
     loc.loation.locCount = loc.loation.locCount + 1; 
    } 


    console.log(loc); 

}); 

var search = twitterStreamClient.start(['snow']); 

回答

2

你需要重寫回調:

var index = loc.reduce(function(acc, current, curIndex) { 
    return current.location == tweet.user.location ? curIndex : acc; 
}, -1); 

if (index === -1) { 
    loc.push({"location": tweet.user.location, "locCount": 1}); 
} else { 
    loc[index].locCount++; 
} 
+0

謝謝!有用! 你能告訴我這裏發生了什麼嗎?我猜測這裏有一個索引,每條推文都會通過它,但我不確定。 – nickfrenchy

+1

你有一個對象數組,但你扮演的是對象的對象。如果你有過相同的對象 –

+1

'如果你有'loc.loation.locCount'可以工作的indexOf才能奏效VAR LOC = {loation:{locCount:1}}; ',它不能通過'tweet.user.location'進行分組。 –

0

Array.indexOf不匹配。您正在創建一個新對象並將其推入數組,並且無論其屬性是否完美匹配不同的對象,它都不會是===平等的。相反,你必須手動找到它:

var foundLoc; 
for (var i = 0; i < loc.length; i++) { 
    if (loc[i].location.x === location.x) 
    foundLoc = loc[i]; 
    break; 
    } 
} 
if (!foundLoc) { 
    loc.push({location: location, count: 0}); 
} else { 
    foundLoc.count++ 
} 
相關問題