我與這些初始屬性五篇文章,以創建一個趨勢公式:嘗試基於某些條件
const articles = [
{ id: 1, views: 92, likes: 0, shares: 2, trendingValue: ? },
{ id: 2, views: 14, likes: 2, shares: 1, trendingValue: ? },
{ id: 3, views: 39, likes: 3, shares: 1, trendingValue: ? },
{ id: 4, views: 87, likes: 0, shares: 1, trendingValue: ? },
{ id: 5, views: 8, likes: 1, shares: 0, trendingValue: ? }
];
我也有一個全球性的統計對象應該的文章被新的看法,喜歡自動更新一次或股票(或每週一次):
const stats = {
totalArticles: 5,
totalViews: 240,
totalLikes: 6,
totalShares: 5,
trendingCriteria: 0
};
到目前爲止,我相信有某種配方,可與文章trendingValue
與統計信息trendingCriteria
來完成。基本上,「趨勢」的文章需要與標準數量相等或更多。這意味着每當文章得到一個新的觀點,分享或類似,trendingValue
有關於更新到它的次數百分比,喜股,由全球統計同行。
一個例子(其不完全工作)是:
- 用戶視圖物品1
此公式的文章運行來創建其
trendingValue
:const article = articles[0]; // Article with id 1 article.views++; // Increment the views count stats.totalViews++ // Increment the total views count let percentSum = ( (article.views/stats.totalViews) + // = 0.3833 (article.likes/stats.totalLikes) + // = 0 (article.shares/stats.totalShares) // = 0.4 ); // = 0.7833 // The trendingValue needs to be a higher value of trendingCriteria // before refreshing trendingCriteria. article.trendingValue = (stats.trendingCriteria + (percentSum/stats.trendingCriteria) );
- 接下來,
trendingCriteria
應根據更新的文章進行更新。基本的邏輯是;如果新的trendingCriteria
高於文章的trendingValue
,則該文章不應該是「趨勢」。
第三步是在那裏我卡住了。我如何創建這個值?這個值是否可以更新爲每個新的視圖,如分享?或者我必須每週更新一次價值?
更新
感謝您的回覆。不幸的是,我不能使用它們,因爲我還不知道如何處理建議的解決方案。
無論如何,我試過另一種解決方案是利用一個時代時間戳以及平均觀看次數,喜歡和股票。不知道它在實踐中是否有效,所以如果有人能證實我會很感激。
function refreshArticleAtIndex(index, props) {
const data = articles[index];
\t
// Increment props
if(props.view) { data.views++; stats.views++; }
else if(props.like) { data.likes++; stats.likes++; }
else if(props.share) { data.shares++; stats.shares++; }
// Refresh trendingRate
data.trendingRate = (() => {
\t const calcViews = data.views/stats.views;
\t const calcLikes = data.likes/stats.likes;
\t const calcShares = data.shares/stats.shares;
\t let value = Date.now() * (
(isFinite(calcViews) ? calcViews : 0) +
(isFinite(calcLikes) ? calcLikes : 0) +
(isFinite(calcShares) ? calcShares : 0)
);
\t return Math.round(value);
})();
}
function logArticles() {
const arr = articles.map(article => article);
arr.sort((a, b) => a.trendingRate > b.trendingRate ? -1 : 1);
arr.forEach(a => console.log(a.id +" |", a.trendingRate));
console.log("----------");
}
const stats = { views: 239, likes: 6, shares: 5 };
const articles = [
{ id: 1, views: 91, likes: 0, shares: 2, trendingRate: 0 },
{ id: 2, views: 14, likes: 2, shares: 1, trendingRate: 0 },
{ id: 3, views: 39, likes: 3, shares: 1, trendingRate: 0 },
{ id: 4, views: 87, likes: 0, shares: 1, trendingRate: 0 },
{ id: 5, views: 8, likes: 1, shares: 0, trendingRate: 0 }
];
console.log("ID | trendingRate");
// ================================================
// Add 1 view to article 1
refreshArticleAtIndex(0, { view: true });
// Add nothing to below articles, but refresh their trendingRate
refreshArticleAtIndex(1, {});
refreshArticleAtIndex(2, {});
refreshArticleAtIndex(3, {});
refreshArticleAtIndex(4, {});
logArticles();
// Add 1 like to article 1
refreshArticleAtIndex(0, { like: true });
logArticles();
第一個日誌將展示基於各種觀點的結合正確的順序,喜股每篇文章。接下來,文章1得到了一個類似的結果,它碰到了最熱門的文章。
問題是,如果這是一個可行的解決方案?
你如何判斷'trendingValue'爲零? –
等於0的'trendingValue'是具有零視圖的新文章,例如和份額。但是,由於我要求提供此值的工作公式,因此我在此例中將其設置爲0。所以在這種情況下這並不意味着什麼。編輯:我現在將它們改爲問號。 –
percentSum應該是一個幾何體而不是簡單的總體或平均值:) –